https://doc.sm.ms/ getToken 接口,发现 java 的 okhttp4 调用返回 403,使用 postman 与 python requests 调用成功。 java okhttp4 不成功
python requests 成功代码
postman 测试成功代码
问题出在哪了,百思不得其姐。 其实使用 fiddler 抓了下两者 http 的包,发现没有区别,https 不知道怎么用 fiddler 抓,okhttp4 问题出在 https 证书上面了嘛?
1
dadaoqueyi OP 有使用 okhttp4 的大佬嘛,另外纯 java 非 android 使用 okhttp4 需要额外引用 kotlin-stdlib,okhttp4 有没有纯 java 语言的客户端,这样会不会有效率问题
![image.png]( https://i.loli.net/2020/09/11/XyAmvBe6UDEluHG.png) |
2
jdkl 2020-09-11 16:56:36 +08:00 via Android
升级到 jdk 到 1.8.0_212 之前的 1.8 这方面有 bug
|
3
monkeyWie 2020-09-11 16:56:43 +08:00
java http 方式请求也不行吗,还是 https 不行,另外截图里的 apiUrl 为啥是 http://https://
|
4
earther01 2020-09-11 16:58:04 +08:00
前一段遇到类似的问题,https 请求用 postman 可以调通,用 java 的 httpClient 死活不通,换了 OKhttp 好了
|
5
dadaoqueyi OP |
6
dadaoqueyi OP @earther01 http4.5 跟 okhttp4 都试过了,都是 403
|
7
dadaoqueyi OP @jdkl 我试下,现在版本 java version "1.8.0_261",看看升级有没有用,thankyou
|
8
dadaoqueyi OP @dadaoqueyi 我擦,看错了,我的版本号比 1.8.0_212 要高呀是 1.8.0_261
|
9
dadaoqueyi OP 安装了下 jdk11,okhttp 使用还是 403
|
10
monkeyWie 2020-09-11 17:24:12 +08:00
@dadaoqueyi 这个问题应该是 cloudflare 安全检查,确实是 TLS 的问题,参考这个帖子: https://www.v2ex.com/t/654469#reply71
|
11
chendy 2020-09-11 17:30:35 +08:00
403 的报错内容是啥…只有一个 403 头?
|
12
mamasan 2020-09-11 17:31:03 +08:00
加个.addHeader("User-Agent", "PostmanRuntime/7.26.5")
|
13
dadaoqueyi OP @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}
|
14
dadaoqueyi OP @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 也没加头 |
15
dadaoqueyi OP @monkeyWie 下班下班,获取我再试下
|
16
mamasan 2020-09-11 17:37:35 +08:00
@dadaoqueyi
response.body().string() |
17
dadaoqueyi OP @mamasan 回家我在试下
|
18
dadaoqueyi OP @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())成功拿到结果 |
19
zcw159357 2020-09-11 19:01:01 +08:00
@dadaoqueyi 第二张图……打码!漏了
|
20
dadaoqueyi OP @zcw159357 你在仔细看看,没漏吧
|
21
zcw159357 2020-09-11 19:50:41 +08:00
@dadaoqueyi traceback 里……
|
22
dadaoqueyi OP @zcw159357 汗汗汗,密码,token 我改掉了,此贴删除
|
23
zcw159357 2020-09-11 20:29:11 +08:00
@dadaoqueyi 咦 删帖只是从列表里去掉吗……感觉还能访问到呢
|
24
dadaoqueyi OP @zcw159357 删不了,我改密码了
|