Javascript 如何使用Google Chrome Puppeter库进行POST请求?
大家好, 我正在尝试使用木偶演员无头铬库进行POST请求。我似乎无法让下面的代码正常工作。 我不断得到一个错误,CSRF令牌没有设置,或者cookie无效 我的问题是,我在《木偶演员》中使用的方法是否正确?如果是这样的话,我有没有办法进行一些调试,以便能够看到发送的实际POST请求Javascript 如何使用Google Chrome Puppeter库进行POST请求?,javascript,node.js,google-chrome,puppeteer,Javascript,Node.js,Google Chrome,Puppeteer,大家好, 我正在尝试使用木偶演员无头铬库进行POST请求。我似乎无法让下面的代码正常工作。 我不断得到一个错误,CSRF令牌没有设置,或者cookie无效 我的问题是,我在《木偶演员》中使用的方法是否正确?如果是这样的话,我有没有办法进行一些调试,以便能够看到发送的实际POST请求 我感谢你的建议和帮助。谢谢,您没有创建请求正文:因此出现了错误。您在请求对象上设置的postData属性不是任何已知属性,因此它也不会在请求上设置,这意味着服务器将永远看不到您的CSRF令牌。你应该调查这件事 我相
我感谢你的建议和帮助。谢谢,您没有创建请求正文:因此出现了错误。您在请求对象上设置的
postData
属性不是任何已知属性,因此它也不会在请求上设置,这意味着服务器将永远看不到您的CSRF令牌。你应该调查这件事
我相信只要用body
替换postData
就可以了,但是如果不访问端点,就很难知道了。据我们所知,它可能需要特殊的标题
考虑到您只发布普通表单数据(这由key=value
代码暗示),我还将开始使用浏览器提供的FormData
对象,以避免手动编码实现细节
const formData = new FormData();
formData.append("CSRFToken", token);
const response = fetch("/loyalty/points", {
method : 'POST',
cookie : cookies,
body : formData,
headers : {
'cookie' : cookies,
/* other headers you need, possibly content-type (see below) */
},
}).then(response => response.text()).catch(error => console.log(error));
return response;
});
警告:使用将始终将数据的内容类型设置为multipart/form data
。如果您的服务器由于某种原因不支持该编码,并且您需要使用application/x-www-form-urlencoded
(),
您不能盲目地更改内容类型
:您还需要这样做
对于调试,我只需使用一个普通的Chrome实例就可以看到这一点。您应该能够在那里运行代码,并在DevTools中查看网络请求(如果您发布了一个空请求,您会立即注意到)。您好,感谢您的帮助。我最终重构了代码,但仍然在正文中使用字符串。最后,它工作得非常好。问题是我的函数从未收到令牌参数。我不得不这样做`让postResponse=wait page.evaluate(fetchLoyaltyPoints,token,cookies);`我的fetchLoyaltyPoints函数也必须接受这两个参数,例如,`function fetchLoyaltyFunction(token,cookies){`
const formData = new FormData();
formData.append("CSRFToken", token);
const response = fetch("/loyalty/points", {
method : 'POST',
cookie : cookies,
body : formData,
headers : {
'cookie' : cookies,
/* other headers you need, possibly content-type (see below) */
},
}).then(response => response.text()).catch(error => console.log(error));
return response;
});