zhx47
1
最终的问题找到了。
2024.04.01 14:06
!CAMELLIA
node环境默认声明了禁用,狗东部分接口如果声明的禁用CAMELLIA
套件就会出现该问题。
在朋友的帮助下成功找到问题。
是node环境下默认的ciphers算法套件的问题,可能京东部分api做了升级,对于部分算法套件做了特殊处理。可以根据抓包工具找到接口的tls算法做手动处理。最后感谢大家的帮助。
const axios = require('axios');
const qs = require('qs');
const https = require('https');
const agent = new https.Agent({
ciphers: 'TLS_AES_256_GCM_SHA384',
});
let config = {
...
httpsAgent: agent,
};
axios.request(config)
.then((response) => {
console.log(JSON.stringify(response.data));
})
.catch((error) => {
console.log(error);
});
因为有一个京东的脚本最近需要维护,然后我就看了一下。
昨天晚上大概花了半小时整理了算法,然后请求之后状态码是403,一直以为是算法出了问题,又花了三个多小时仔细核对整理了原始js。最后发现了一个奇怪的事情。
相同报文的情况下只有nodejs结果非正常,但是只要加一层代理(即使是透明的)他就正常了。
以下均为postman生成对应平台的代码,保证报文完全一样。
postman请求正常。
java okhttp3正常
python requests正常
nodejs axios 提示403
想要同学说可能是qs.string的问题,导致报文出错,然后加一下代理抓包看一下
然后正常了…
这是个什么问题。。。
该请求位于 京东试用列表
POST https://api.m.jd.com/client.action 请求
functionId为:try_SpecFeedList
在node环境以尝试got、axios、request,结果均在预期之外…
1 个赞
zhx47
4
里面有h5st算法,但是现在问题是nodejs环境请求会出问题
1 个赞
edwa
(edwa)
6
会不会是content-length头部的问题?我记得burp等工具会自动计算content-length,搜索了一下发现这篇文章 偶遇 Content-Length 和 Transfer-Encoding - 掘金 。提及 axios使用chunked发送request body ,或许是狗东服务器不支持chunked。不知道是个例还是axios某个策略。
看看有没有可能是证书的问题 我记得node18 会强制校验https证书
edwa
(edwa)
10
我又想出来另外一种可能。有没有可能是因为你没有指定的这些请求头,某个的默认值,狗东的服务器不能解析,因而返回403 ?如Accept-Encoding ,当有第三方透明proxy中转,这个值将由proxy解析并重新设置,从而响应200。
翻到了一个类似的案例:
zhx47
13
request包依然不行,现在nodejs环境已经尝试 got、axios、request,均出现预期外的结果。
另外我已经把这个奇怪的请求出处贴在了正文末尾。
zhx47
14
证书问题是啥意思,因为接口是京东的,我在认知里面应该不会存在失效的情况
edwa
(edwa)
15
那真的太玄学了。nodejs所有库都不行,感觉应该真不是出在http数据包的构建上了,可能是nodejs ssl实现有什么诡异的地方。
按理说一个小小的狗东api,不应该专门ban掉node ssl握手指纹(不ban Python等其他),楼上说证书错误,感觉也不太可能,毕竟证书错误node会直接报错,但他返回403了。就是说ssl握手完成了,http请求包也发送出去了,http请求包也是符合规范的,但403。合理怀疑是不是狗东ban掉node的客户端指纹。
昨天查文档,类似的问题有不少人提出,甚至proxy能200的状况也一模一样,但没有讨论出结论。有一篇文,有人提议用workers或者别的反代api,实现绕过某些api 在node 403的问题,最后要是查不出所以然,也只能像他们一样,反代凑合着用了。
zhx47
16
已经排除出来问题了,node环境默认的ciphers算法套件的问题
zhx47
18
具体是哪一个套件出了问题还没排除出来,但是问题和解决方案已经找到了
edwa
(edwa)
20
话说京东服务器不支持加密套件,竟然是在响应包返回403。。我还以为会握手失败的。。这是符合HTTPS规范的行为,还是说只是京东中间件的大雷。。