- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
如何通过okHttp重用http keep-alive连接?
我的代码示例:
public class MainWithOkHttp {
static OkHttpClient _client = new OkHttpClient();
public static void main(String[] args) {
...
query1();
...
// in this request
Request _request = new Request.Builder()
.url("...")
.addHeader("connection", "keep-alive")
.addHeader("cookie", _cookie)
.post(postParams)
.build();
// in this request my previous session is closed, why?
// my previous session = session created in query1 method
Response _response = _client.newCall(_request).execute();
...
}
...
private static void query1() {
...
Request request = new Request.Builder()
.url("...")
.addHeader("connection", "keep-alive")
.addHeader("cookie", _cookie)
.get()
.build();
Response _response = _client.newCall(request).execute();
...
}
...
}
所以,我正在调用 query1()
方法。在此方法中打开连接,在服务器端创建 session 并接收带有 sessionId 的 cookie。
但是,当我对服务器执行另一个查询时 - 我以前的连接没有被使用,服务器上的 session 已经关闭。服务器中的 session 生命周期不短,所以问题不在生命周期。
PS:我从服务器获取验证码并识别验证码,然后使用验证码向服务器执行查询。但是服务器端的验证码无法识别,因为 session 已经关闭并且验证码存储在 session 中。
最佳答案
最终,以下代码对我有用:
public class Main {
static OkHttpClient _client = new OkHttpClient();
public static void main(String[] args) throws IOException {
performQuery();
}
private static void performQuery() throws IOException {
Request firstRequest = new Request.Builder()
.url("http://localhost/test/index.php")
.get()
.build();
Response firstResponse = _client.newCall(firstRequest).execute();
Request.Builder requestBuilder = new Request.Builder()
.url("http://localhost/test/index.php");
Headers headers = firstResponse.headers();
requestBuilder = requestBuilder.addHeader("Cookie", headers.get("Set-Cookie"));
Request secondRequest = requestBuilder.get().build();
Response secondResponse = _client.newCall(secondRequest).execute();
}
}
看来,问题出在 _cookie
对象上。
关于Java okHttp重用保活连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33281810/
如果远程主机设置为由于不事件而中断连接,是否有办法配置 MacFUSE 以保持挂载的卷处于事件状态?如果没有直接的方法来配置这个,有没有办法编写一个脚本来完成这个? 最佳答案 试试 Fuse4x .它
考虑到我们的设置只涉及 Windows 和 Linux 机器,是否有理由使用应用程序级别的心跳而不是 TCP keepalives 来检测陈旧的连接? 最佳答案 似乎无法在 Windows 或 OSX
我在 WCF 中有一个长时间运行的进程,需要 2-3 个小时。 WCF 在启动进程的客户端离开/超时后运行了很长时间。由于没有连接,WCF w3wp 进程消失需要多长时间。我在想,即使 WCF 正在处
我编写了这段代码来设置服务器流: -(void)streamOpenWithIp:(NSString *)ip withPortNumber:(int)portNumber; { CFR
我正在尝试使用 asio 实现一个 Web 服务器,但尽管将接受器设置为保持事件状态,但当我收到连接时,在我发送响应后,连接套接字始终关闭,即使我重新 -从套接字读取(为了从 http 实现 keep
我一直在从我的 macOS 通过 gcloud ssh 连接到 Google Cloud VM 实例: $ gcloud compute ssh [username]@[instance] 从一周前开
我是一名优秀的程序员,十分优秀!