为什么在使用 XMLHttpRequest 时手动设置“Accept-Time”标头和时间戳总是“未定义”?

问题描述 投票:0回答:1

我尝试使用 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
。 似乎没有有效的方法来删除标题键和值。

request header xmlhttprequest
1个回答
0
投票

已经有一个星期没有人回答我的问题了...

我发现

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));

最终这段代码会返回满意的结果。

© www.soinside.com 2019 - 2024. All rights reserved.