我在PHP中发送标头时遇到了一个令人哭笑不得的问题。我花了大约45分钟在SO和其他网站上阅读,我无法想出我的问题的正当理由。
我需要向另一台服务器发送POST请求,我正在使用PHP header()函数来设置值。我在下面有示例代码。
$server = 'http://fakedomain.com';
$server_path = '/';
$request = 'key=value&key2=value2';
header("POST $server_path HTTP/1.1" );
header("Host: $server\r\n" );
header("Content-type: application/x-www-form-urlencoded\r\n" );
header("Content-length: ".strlen($request)."\r\n" );
header("Connection: close\r\n\r\n" );
header($request);
我尝试了各种选项,但每个选项都会在我的日志文件中导致相同的错误
malformed header from script. Bad header=POST / HTTP/1.1: php5.cgi
我是一名经验丰富的PHP程序员,他不需要手动发送HTTP post请求。
我希望代码重定向浏览器,这就是我决定使用此方法的原因。
我做得对吗?
还有其他方法是标准的,我只是不知道吗?
答案 0 :(得分:11)
答案 1 :(得分:1)
标题功能与返回给客户端的标题有关,我建议您使用cURL来处理您的帖子请求:http://www.php.net/cURL
答案 2 :(得分:0)
如果要将用户重定向到其他页面,则应使用
header("Location: http://domain.com/some.other.page?x=y");
如果您希望用户将POST变量发送到重定向页面,则需要使用JavaScript。
<html>
<head>
<title>Redirect</title>
</head>
<body onload="document.myform.submit()">
<form name="myform" action="http://domain.com/some.other.page" method="POST">
<input type="hidden" name="x" value="y">
</form>
</body>
</html>
答案 3 :(得分:0)
扩展timdev的答案,这是您使用的cURL:
<?php
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,"http://www.target.com/script.php");
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, "postvar1=value1&postvar2=value2&postvar3=value3");
curl_exec ($ch);
curl_close ($ch);
?>
答案 4 :(得分:0)
我尝试过简单的html表单发布它适用于我
<?php
if( $dev === 'sample1' || $dev === 'sample2' ) {
?>
<form name="frmpostdata" action="mystatement.php" method="post">
<input type="hidden" name="cmsReq" value="MobApp" />
<input type="hidden" name="cardno" value="<?php echo $chkTkn['cardno'];?>" />
<input type="hidden" name="cardPwd" value="<?php echo $chkTkn['pwd'];?>" />
<input type="submit" style="display:none;" name="Submit" value="" />
</form>
<script>
document.frmpostdata.submit();
</script>
<?php
exit;
}
?>