Java OKhttp4.0 与 Python Requests、Postman 区别

2020-09-11 16:48:06 +08:00
 dadaoqueyi

https://doc.sm.ms/ getToken 接口,发现 java 的 okhttp4 调用返回 403,使用 postman 与 python requests 调用成功。 java okhttp4 不成功

python requests 成功代码

postman 测试成功代码

问题出在哪了,百思不得其姐。 其实使用 fiddler 抓了下两者 http 的包,发现没有区别,https 不知道怎么用 fiddler 抓,okhttp4 问题出在 https 证书上面了嘛?

2977 次点击
所在节点    程序员
24 条回复
dadaoqueyi
2020-09-11 16:50:33 +08:00
有使用 okhttp4 的大佬嘛,另外纯 java 非 android 使用 okhttp4 需要额外引用 kotlin-stdlib,okhttp4 有没有纯 java 语言的客户端,这样会不会有效率问题
![image.png]( https://i.loli.net/2020/09/11/XyAmvBe6UDEluHG.png)
jdkl
2020-09-11 16:56:36 +08:00
升级到 jdk 到 1.8.0_212 之前的 1.8 这方面有 bug
monkeyWie
2020-09-11 16:56:43 +08:00
java http 方式请求也不行吗,还是 https 不行,另外截图里的 apiUrl 为啥是 http://https://
earther01
2020-09-11 16:58:04 +08:00
前一段遇到类似的问题,https 请求用 postman 可以调通,用 java 的 httpClient 死活不通,换了 OKhttp 好了
dadaoqueyi
2020-09-11 17:01:10 +08:00
dadaoqueyi
2020-09-11 17:01:39 +08:00
@earther01 http4.5 跟 okhttp4 都试过了,都是 403
dadaoqueyi
2020-09-11 17:02:47 +08:00
@jdkl 我试下,现在版本 java version "1.8.0_261",看看升级有没有用,thankyou
dadaoqueyi
2020-09-11 17:06:24 +08:00
@dadaoqueyi 我擦,看错了,我的版本号比 1.8.0_212 要高呀是 1.8.0_261
dadaoqueyi
2020-09-11 17:19:38 +08:00
安装了下 jdk11,okhttp 使用还是 403
monkeyWie
2020-09-11 17:24:12 +08:00
@dadaoqueyi 这个问题应该是 cloudflare 安全检查,确实是 TLS 的问题,参考这个帖子: https://www.v2ex.com/t/654469#reply71
chendy
2020-09-11 17:30:35 +08:00
403 的报错内容是啥…只有一个 403 头?
mamasan
2020-09-11 17:31:03 +08:00
加个.addHeader("User-Agent", "PostmanRuntime/7.26.5")
dadaoqueyi
2020-09-11 17:33:12 +08:00
@chendy 17:33:01.402 [main] INFO vip.codehome.imghost.util.SMMSApiUtil - Response{protocol=h2, code=403, message=, url=https://sm.ms/api/v2/token}
dadaoqueyi
2020-09-11 17:36:37 +08:00
@mamasan 17:34:51.397 [main] INFO vip.codehome.imghost.util.SMMSApiUtil - Response{protocol=h2, code=200, message=, url=https://xxxxxxxxxxxi/v2/token}
加个头是 200,但是 token 没拿到,python Requests 也没加头
dadaoqueyi
2020-09-11 17:37:08 +08:00
@monkeyWie 下班下班,获取我再试下
mamasan
2020-09-11 17:37:35 +08:00
@dadaoqueyi
response.body().string()
dadaoqueyi
2020-09-11 17:40:21 +08:00
@mamasan 回家我在试下
dadaoqueyi
2020-09-11 18:22:03 +08:00
@mamasan Request request=new Request.Builder()
.url(apiUrl)
.post(formBody)
.addHeader("Authorization",secret)
.addHeader("User-Agent", "aa")
.build();
Call call=client.newCall(request);
try {
Response response=call.execute();
log.info(new String(response.body().bytes()));
return response.toString();
}catch(IOException e) {
throw new RuntimeException("网络请求失败",e);
}
}
//加了个 User-Agent 头,用 new String(response.body().bytes())成功拿到结果
zcw159357
2020-09-11 19:01:01 +08:00
@dadaoqueyi 第二张图……打码!漏了
dadaoqueyi
2020-09-11 19:47:08 +08:00
@zcw159357 你在仔细看看,没漏吧

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/706205

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX