发送 POST 到 URL
Posted
技术标签:
【中文标题】发送 POST 到 URL【英文标题】:Sending POST to URL 【发布时间】:2020-06-20 07:48:55 【问题描述】:我想将一个 php 页面重定向到另一个通过 HTTP POST 方法向其发送数据的页面。
我不能使用cURL,因为我需要相对的URLs(这个函数要从不同的位置调用),所以我在网上找到了这个函数:
function head($url)
$string = http_build_query($GLOBALS['new']);//$GLOBALS['new'] is an array containing some variables and I already tested it using var_dump()
$options = array('method'=>'POST', 'header'=>'Content-type: application/x-www-form-urlencoded', 'content'=>$string);
file_get_contents($url, false, stream_context_create(array('http'=>$options)));
echo error_get_last()['message'];//temporary to see the error message
header("Location: $url");
我会通过输入head(".?result=success)
或类似的东西来调用它...
问题是我收到此错误消息
file_get_contents(.?result=success): failed to open stream: No error
而目标页面没有收到任何东西。
不管它是什么意思,我找不到任何方法来修复它,甚至删除 HTTP GET 方法或改用绝对路径(即使它不是我的目的)也没有任何改变。
你能找到我的方法吗?
或者,如果不可能,您能否建议我另一种使用相对 URLs 发送 HTTP POST 的方法?
【问题讨论】:
head(".?result=success)
,你是说header("Location:?result=success")
吗?不需要点
@dalelandry 输出相同(初始单点对于相对路径来说是可选的)
您是否包含了要发送到标头请求的页面?例如,如果我从索引页面发送标题重定向并检查结果是否设置在说联系页面上,我的标题重定向看起来像 header("Location: http://<--yoursite-->/contact.php?result=success")
函数 file_get_contents 不能使用相对 URL,它必须是完整的 URL。但是您可以使用超级全局变量 $_SERVER 构建完整的 URL。
@dalelandry 我无法理解这与我的代码之间的区别......
【参考方案1】:
这是我在网站用户类中用于登录的代码的工作示例
$url = 'http://' . $_SERVER['HTTP_HOST']; // Get the server
$url .= rtrim(dirname($_SERVER['PHP_SELF']), '/\\'); // Get the current directory
$url .= 'index.php?error'; // <-- Your relative path
header('Location: ' . $url, true, 302);
exit;
然后在我的 index.php 页面上,我有一个 if 语句来评估
if(isset($_GET[error])) //set error message and handle error
【讨论】:
302 是什么意思?file_get_contents
仍然不发送 HTTP POST 数据
302 是响应状态码... Mozilla MDN:具有此状态码的 HTTP 响应将在标头字段 Location 中额外提供 URL。这是对用户代理(例如 Web 浏览器)的邀请,以向位置字段中指定的新 URL 发出第二个其他相同的请求。最终结果是重定向到新 URL。
那么向那个 URL 发送 POST 呢?
您的 POST 是如何生成的?这是来自表单还是来自其他来源的 POST?您是否希望动态创建 header() 重定向,然后将 POST 变量应用于该 URL?以上是关于发送 POST 到 URL的主要内容,如果未能解决你的问题,请参考以下文章
使用 CefSharp C# 将 POST 数据发送到 URL