这是okhttp的bug吗?(已解决)
本帖最后由 ppgjx 于 2023-6-7 11:28 编辑如图 语句已经执行到最后一个输出语句 后面没有任何代码 但是这个main函数没有结束 还是一直在运行中
这是maven
<dependency> <groupId>com.squareup.okhttp3</groupId>
<artifactId>okhttp</artifactId>
<version>3.14.9</version>
</dependency>
下面是代码 而且我发现只要请求 https://api.appstoreconnect.apple.com/v1/apps 这个网址就会卡主 请求百度则不会
已解决 确实是okhttp的bug 升级maven版本到4.1这个问题就没复现了
import okhttp3.*;
import javax.script.ScriptException;
import java.io.*;
import java.net.InetSocketAddress;
import java.net.Proxy;
import java.util.*;
import java.util.concurrent.TimeUnit;
public class TextTo {
public static void main(String[] args) throws Exception {
OkHttpClient client = new OkHttpClient().newBuilder()
.build();
MediaType mediaType = MediaType.parse("text/plain");
MediaType JSON = MediaType.parse("application/json; charset=utf-8");
RequestBody body = RequestBody.create(JSON, "{}");
Request request = new Request.Builder()
.url("https://api.appstoreconnect.apple.com/v1/apps")
.method("POST", body)
.build();
Response response = client.newCall(request).execute();
System.out.println("执行结束");
}
}
应该要在headers中添加身份验证信息 接口是有鉴权和防刷的 没直接用过OkHttpClient,使用Springboot都是直接使用RestTemplate的 isiyuan 发表于 2023-6-7 09:22
接口是有鉴权和防刷的
问题是 他接口不管成功还是失败 这个main方法都应该会结束 而不是卡主 OkHttpClient 还存活着了吧 是不是要手动关闭 没用过okhttp,但是大概查了一下,okhttp发送请求时是新开一个线程去请求的,你访问的那个url,不知道是什么原因,可能是网络不通畅或者其他原因,卡住了,所以导致线程没有关闭,一直在请求中,所以导致你运行到最后一句,main也没有结束,因为还有线程存活,你设置个timeout。 你没有设置超时时间吧,okhttp是另外一个线程去访问的,你的main方法没有结束因为http请求还在。
##################### httpUtils properties #####################
ok.http.connect-timeout=60
ok.http.keep-alive-duration=300
ok.http.max-idle-connections=200
ok.http.read-timeout=60
ok.http.write-timeout=60
这是我现在的配置你可以根据你的需求做一下调整 不是 BUG , client 有自己的连接池, 并且池子里的线程是守护线程.
需要手动关闭 , 才会结束进程
client.connectionPool().evictAll();
client.dispatcher().executorService().shutdown();
页:
[1]
2