这基本上就是我的代码:
devDataSource
// in file1.php
<?php print_r($_POST); ?>
<form method="POST" action="http://localhost:1234">
<button type="submit" value="3" name="q">Register</button>
</form>
这是此代码需要做的事情:
当我在// in server.js
app.post('/', (req, res) => {
request.post(
req.headers.referer,
{ form: { test: "mytest" } },
function (error, response, body) {
if (!error && response.statusCode == 200) {
// Print out the response body
res.set("POST", "test=1234");
res.redirect(302, req.headers.referer);
}
});
});
app.listen(1234);
并点击file1.php
按钮时,它会将帖子请求发送回Register
file1.php
作为{ test: "mytest" }
的帖子标题}; http://localhost:1234
对该帖子请求执行某些操作并将响应发送回file1.php
(在http://localhost:1234
内的回调内),然后,它应将POST标题更改为request.post()
,重定向到{ test: 1234 }
并在屏幕上显示file1.php
。
问题在于我无法让它在屏幕上显示该文本,看起来标题没有改变,或者我没有很好地改变它们。我该怎么办?
答案 0 :(得分:1)
我认为您使用HTTP方法将标头与请求正文和标题名称混淆。
有了这个:
res.set("POST", "test=1234");
您只能更改响应标头,并且在执行重定向后不要告诉客户端使用此标头。
此外,设置名为POST的标头不会传递POST请求正文中该标头值的数据。
您似乎正在尝试在POST请求中使用正文中传递的某些字段进行重定向结果,但您在此处所做的是设置一个名为POST的标题,其中您可能希望在正文中设置。它不会这样工作。
正常重定向(301 Moved Permanently或302 Found)将始终产生GET请求,即使重定向是对POST的响应,因为在实践中301和302工作如303 See Other导致GET请求。有一个307临时重定向明确禁止更改HTTP方法,但浏览器应该在跟踪此类重定向之前警告用户,并且它可能并不总是有效。有关详细信息,请参阅此答案:
答案 1 :(得分:0)
在以这种方式重定向时,无法更改客户端的POST请求,除非您希望通过让服务器代表客户端进行重定向来代理请求。
但是有一些解决方案,首先使用307而不是302来重定向你的帖子请求
res.redirect(307, "http://badasse.com/api/t2");
然后你可以通过GET参数传递额外的数据。
res.redirect(307, "http://badasse.com?morePost="+encodeURIComponent(JSON.stringify({data1: "yolo"}));
或标题:
res.setHeader("MyHeader", "MyStringifiedDatas")
或者只是尝试使用会话
req.session['success'] = 'User added successfully';