簡單和靈活的HTTP請求Java庫:java-requests

jopen 9年前發布 | 24K 次閱讀 網絡工具包 java-requests

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 中的設置無效。

項目主頁:http://www.baiduhome.net/lib/view/home/1426254299467

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!