我尝试使用 XMLHttpRequest 在 DevTools 的控制台中发送 POST 请求。 我的 JavaScript 代码如下:
var serverTime = Date.now().toString(),
post_data = 'token=......',
xhr = new XMLHttpRequest();
xhr.open('POST', 'https://......', false);
xhr.setRequestHeader('Accept', 'application/json, text/javascript, */*; q=0.01');
xhr.setRequestHeader('Accept-Time', serverTime);
xhr.setRequestHeader('Content-type', 'application/x-www-form-urlencoded; charset=UTF-8');
xhr.setRequestHeader('X-Requested-With', 'XMLHttpRequest');
xhr.send(post_data);
serverTime
变量是时间戳字符串,例如“1692943302368”。
标题键Accept-Time
的设置应该是'1692943302368'。
但是,运行此代码片段后,响应状态代码为 403。 我在DevTools中观察了
Request Headers
,发现Accept-Time
是undefined, 1692943302368
,这可能会导致POST请求失败。
为什么时间戳前面总是有
undefined
?
相反,网站的原始 JavaScript 代码总是简单地用时间戳设置标头字段,而没有
undefined,
。
不幸的是,由于该网站的原始 JavaScript 代码已被严重混淆,我无法找到它如何设置标题的魔力。
我曾尝试搜索有关此事的文章,但没有相关结果。我的代码中的标头设置有问题吗?如何正确设置头部字段Accept-Time?
我尝试使用以下方法清除
Accept-Time
的值:
xhr.setRequestHeader('Accept-Time', '');
xhr.setRequestHeader('Accept-Time', serverTime);
令人失望的是,这种方式只会将
undefined,,1692943302368
分配给 Accept-Time
。
似乎没有有效的方法来删除标题键和值。
已经有一个星期没有人回答我的问题了...
我发现
xhr.setRequestHeader()
已经被混淆的JavaScript代码覆盖了,这就是为什么setRequestHeader()
函数会变得很奇怪。
我没有使用 XMLHttpRequest,而是使用另一种方法来解决这个问题:
fetch
:
var url = 'https://......',
page='1',
serverTime=Date.now(),
token='......',
post_data = {'page': page, 'token': token},
formData = new URLSearchParams(post_data),
headers = new Headers();
headers.append('accept', 'application/json, text/javascript, */*; q=0.01');
headers.append('content-type', 'application/x-www-form-urlencoded; charset=UTF-8');
headers.append('accept-time', serverTime);
headers.append('X-Requested-With', 'XMLHttpRequest');
fetch(url, {
method: 'POST',
headers: headers,
body: formData
})
.then(response => response.json())
.then(data => console.log(data))
.catch(error => console.log(data));
最终这段代码会返回满意的结果。