Java的世界里,HttpClient 是一个功能强大的Http请求库,然而接口非常复杂,设计上遵从正交性,简单的请求也需要写比较多的代码,更不要说隐藏在各种细节里面的高级用法了。
Requests, 是一个模仿python requests 模块来设计的Http lib,拥有简单而灵活的API,在容易使用的同时,又能够满足各种高级定制的使用,可是说是当前最好用的Java Http Client Lib。
简单的请求示例:
String url = ...; Response<String> resp = Requests.get(url).text(); // post 和其他方法 resp = Requests.post(url).text(); resp = Requests.head(url).text(); //读取Http Response int statusCode = resp.getStatusCode(); Headers headers = resp.getHeaders(); Cookies cookies = resp.getCookies(); String body = resp.getBody(); //response 返回其他类型 resp = Requests.get(url).text("UTF-8"); // get response as bytes Response<byte[]> resp1 = Requests.get(url).bytes(); // save response as file Response<File> resp2 = Requests.get(url).file("/path/to/save/file"); // url 参数: Map<String, Object> map = new HashMap<>(); map.put("k1", "v1"); map.put("k2", "v2"); Response<String> resp = Requests.get(url).param("key1", "value1").params(map) //.params(new Parameter(...), new Parameter(...)) .text(); // 请求头 Response<String> resp = Requests.get(url).header("key1", "value1").headers(map) //.headers(new Header(...), new Header(...)) .text(); // 添加Cookie: Map<String, Object> cookies = new HashMap<>(); Response<String> resp = Requests.get(url).cookie("key1", "value1").cookies(map) //.cookies(new Cookie(...), new Cookie(...)) .text(); // 设置 userAgent Response<String> resp = Requests.get(url).userAgent(userAgent).text(); // 增加请求数据(post, put, patch方法) // send form-encoded data. x-www-form-urlencoded header will be send automatically Response<String> resp = Requests.post(url).data(map).text(); // send string data String str = ...; resp = Requests.post(url).data(str, "UTF-8").text(); // send from inputStream InputStream in = ... resp = Requests.post(url).data(in).text(); // multipart 请求, 用于文件上传: Response<String> resp = Requests.post(url).data(map).multiPart("ufile", "/path/to/file") .multiPart(..., ...).text();
请求设置:
//禁止自动重定向 Response<String> resp = Requests.get(url).allowRedirects(false).text(); //超时 // both connec timeout, and socket timeout Response<String> resp = Requests.get(url).timeout(30_1000).text(); // set connect timeout and socket timeout resp = Requests.get(url).timeout(30_1000, 30_1000).text(); //禁止使用gzip Response<String> resp = Requests.get(url).gzip(false).text(); // 不检查https 证书 Response<String> resp = Requests.get(url).verify(false).text(); // Http Basic 验证 Response<String> resp = Requests.get(url).auth("user", "passwd").verify(false).text(); //代理,支持http, https, socks 代理 Response<String> resp = Requests.get("http://www.baidu.com/") .proxy(Proxy.httpProxy("127.0.0.1", 8080)) .text();
Session. session 可以用来维持http 会话,自动处理cookie, basic auth 等信息:
Session session = Requests.session(); Response<String> resp1 = session.get(url1).text(); Response<String> resp2 = session.get(url2).text();
连接池. 连接池可以用来在多个请求之间复用Http 连接:
ConnectionPool connectionPool = ConnectionPool.custom().verify(false) .maxPerRoute(20) .maxTotal(100) //.proxy(...) .build(); Response<String> resp1 = Requests.get(url1).connectionPool(connectionPool).text(); Response<String> resp2 = Requests.get(url2).connectionPool(connectionPool).text(); connectionPool.close();
如果使用了连接池,verify 和 proxy 需要在连接池中设置,Requests 中的设置无效。
Request对象和Response对象的原理 Request和Response对象是由服务器创建的。我们来使用它们 Request对象是来获取请求消息,Response对象是来设置响应消息。 Request对象 request对象继承体系结构 ServletRequest -- 接口 | 继承 HttpServletRequest -- 接口 | 实现 org.apache.catalin
request对象 request对象是来获取请求消息数据 1.获取请求行数据 GET /test/demo1?name=xiaobai HTTP/1.1 获取请求方式:String getMethod(); GET ***** 获取虚拟目录:string getContextPath(); /test
java获取response与request 方式一 监听 web.xml <listener> <listener-class>org.springframework.web.context.request.RequestContextListener</listener-class> </listener> java类 HttpServletRequest request = (
request和response 回顾 1 什么是Servlet:小服务器程序,用Java编写的服务器端程序,主要功能在于交互式地浏览和修改数据,生成动态Web内容。 2 创建Servlet 3 配置Servlet 4 接受请求参数 5 响应数据 今日内容 1、重定向和转发 2、HTTPServletResponse的使用 3、HTTPServletRequest的使用 教学目标 1、
1.感谢Liu Dong的开源项目! 项目地址:https://github.com/clearthesky/requests requests-4.8.0.jar(该版本支持jdk1.7):http://pan.baidu.com/s/1mhAhqeG 具体的使用方法,请查看项目地址中Usage。 2.一个简单的HTTP请求的例子,发送请求和读取响应字符串: Map<String, Object
加上工具类的代码: public static byte[] getRequestPostBytes(HttpServletRequest request) throws IOException { int contentLength = request.getContentLength(); if(contentLength<0){ return null; } byte buffer[] =
JavaWeb——Request tomcat服务器会创建request和response对象,其中request对象封装了请求消息的数据 一、请求消息数据格式 请求消息数据格式包括哟了 3个部分:请求行,请求头,请求体 1. 请求行 //请求地址 Request URL: https://dss0.bdstatic.com/5aV1bjqh_Q23odCf/static/mancard/img/
request.getParameter("companyName");是获得表单(前台页面表单中名称为companyName)提交的数据。 request.getParameter(参数名) 在超链接里带的参数用。 request.getAttribute("cc")是获得你setAttribute的数据(获得是你自己存起来的参数cc的值) HttpServletRequest类既有getAt
HTTP请求(request) 浏览器发送给服务器的数据 组成 请求行(url + 协议…) 请求头(浏览器发送给服务器的数据) 请求体(参数) HttpServletRequest 创建:web服务器创建的(Tomcat) 作用:封装浏览器发送给服务器的数据(请求行+请求头+请求体) 常用(请求行)方法 // 获得请求方法: get/post request.getMethod(); // 统一
package web.platform.util; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.net.ConnectException; import java.net.UR
JSR 对于从事java工作的小伙伴来说可能均听说,但是具体是什么意思呢? JSR是Java Specification Requests的缩写,意思是Java 规范提案。是指向JCP(Java Community Process)提出新增一个标准化技术规范的正式请求。任何人都可以提交JSR,以向Java平台增添新的API和服务。JSR已成为Java界的一个重要标准。 说人话就是你要提交一个jav
比较不常见但是还会用到的几种: request.getScheme() :获取当前访问的协议,比如http request.getServerName() :获取当前服务器的名字 request.getServerPort() :获取当前服务器的端口号 getAttribute(String name):返回由name指定的属性值 getAttributeNames():返回req
以下内容是转载过来 一、什么是Requests Requests 是⽤Python语⾔编写,基于urllib,采⽤Apache2 Licensed开源协议的 HTTP 库。它⽐ urllib 更加⽅便,可以节约我们⼤量的⼯作,完全满⾜HTTP测试需求。 ⼀句话——Python实现的简单易⽤的HTTP库 二、安装Requests库 进入命令行win+R执行 命令:pip install reques
第一种,通过springmvc,参数注入 @PostMapping(value = "/xxx") public Result xxx(HttpServletRequest request) { } 通过RequestContextHolder获取 这种方式在项目任何地方都可以拿到,只要Request已经注入 private static HttpServletRequest get
我在Jmeter中有一个Java请求,我为它编写了扩展AbstractJavaSampleClient的代码,并实现了重写的方法,可以在远程机器的日志中看到响应,但在Jmeter中的view Results树和save response to file中看不到响应。下面是运行测试代码片段,请告诉我如何在Jmeter中捕获Java请求响应
问题内容: 我有以下CURL请求,谁能请我确认subesquest HTTP请求是什么? 会是这样吗? 任何人都可以帮助我将上述curl请求完全转换为httpreq。 提前致谢。 苏维 问题答案: 有很多方法可以实现这一目标。在我看来,以下一项是最简单的,同意它不是很灵活,但是可以工作。
问题内容: 在我的Web应用程序中,有些请求的持续时间超过20秒。但是在某些情况下,代码可能会导致无限循环或类似事件,从而减慢服务器速度。 我想在服务器端放置60秒的请求超时。这是在tomcat中实现的吗? 问题答案: 使用Tomcat 7,你可以添加StuckThreadDetectionValve,这将使你能够识别“卡住”的线程。你可以在要进行检测的应用程序的Context元素中设置阀门: 这
我试图对我写的rest api执行一个put请求,但它总是返回400-bug请求。 java.io.IO异常:服务器返回HTTP响应代码:400为URL:http://localhost:8000/api/v0/contacts/2sun.net.www.protocol.http.HttpURLConnection.getInputStream(未知来源) 我可以用firefox rest客户端
问题内容: 如何用Java发出HTTP Json请求?有图书馆吗?在“ HTTP Json请求”下,我的意思是使用Json对象作为数据进行POST,并以Json接收结果。 问题答案: 除了本身进行HTTP请求(甚至可以仅使用 **java.net.URL.openConnection** 即可完成)之外,您还需要一个JSON库。为了方便地与POJO绑定,我建议使用Jackson。 因此,类似: (
本文向大家介绍playframework Java:接受JSON请求,包括了playframework Java:接受JSON请求的使用技巧和注意事项,需要的朋友参考一下 示例
我的java代码 这是我得到的错误:08-19 09:58:35.690:W/System。err(737):SoapFault-faultcode:“SOAP-ENV:Server”faultstring:“3001:未知用户试图执行消息类型UserAuthenticationRequest。需要身份验证。”faultactor:“null”详细信息:org。kxml2.kdom。Node@40