This question already has answers here:
Automatic cookie handling with OkHttp 3
(11个答案)
3个月前关闭。
我一直在使用Java向服务器发出请求的客户端。现在要使用户保持登录状态,我需要以与邮递员或浏览器相同的方式来设置cookie,也就是说,如果服务器设置了cookie,则客户端必须在以后指向该URL的请求中使用它。我目前有一个使用OkHttp实现的http客户端,但是如果有更好的方法,我不会介意更改该库。我一直在寻找,我已经看到CookieJar可以解决我的问题,但是我没有找到具体的例子。
简而言之:如何通过此方法向该界面添加cookie以实现目标?
非常感谢你!
P.D .:服务器正确设置了cookie,就像在浏览器中一样,而Postman则像超级按钮一样工作。
(11个答案)
3个月前关闭。
我一直在使用Java向服务器发出请求的客户端。现在要使用户保持登录状态,我需要以与邮递员或浏览器相同的方式来设置cookie,也就是说,如果服务器设置了cookie,则客户端必须在以后指向该URL的请求中使用它。我目前有一个使用OkHttp实现的http客户端,但是如果有更好的方法,我不会介意更改该库。我一直在寻找,我已经看到CookieJar可以解决我的问题,但是我没有找到具体的例子。
简而言之:如何通过此方法向该界面添加cookie以实现目标?
非常感谢你!
public static String sendPost(Map<String,Object> messageToSend, String url) throws Exception {
// Set requestBody as individual formatted to json
String jsonRequest = new Gson().toJson(messageToSend);
RequestBody body = RequestBody.create(jsonRequest,MediaType.parse("application/json; charset=utf-8"));
// Set request parameters
Request request = new Request.Builder()
.url("http://" + ADDR + ":" + PORT + url)
.addHeader("User-Agent", "OkHttp Bot")
.post(body)
.build();
// Send request and get response body
Response response = HTTP_CLIENT.newCall(request).execute();
if (response.isSuccessful()) {
ResponseBody responseBody = response.body();
if (responseBody != null)
return responseBody.string();
}
return null;
}
P.D .:服务器正确设置了cookie,就像在浏览器中一样,而Postman则像超级按钮一样工作。
最佳答案
最后,我将OkHttp更改为HttpClient(通过Apache),并且运行良好。
我使用的代码:
private HttpClient httpClient;
private HttpContext httpContext = new BasicHttpContext();
public MyHttpClient() {
httpClient = HttpClientBuilder.create().build();
httpContext.setAttribute(HttpClientContext.COOKIE_STORE, new BasicCookieStore());
}