带有header()和Bad header问题的PHP POST

时间:2009-10-19 00:31:00

标签: php http

我在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请求。

我希望代码重定向浏览器,这就是我决定使用此方法的原因。

我做得对吗?

还有其他方法是标准的,我只是不知道吗?

5 个答案:

答案 0 :(得分:11)

header()发送响应标头。

听起来你想在后端发出请求

所以你可能想用curl来发出请求。

如果您在处理完回复后,想要向用户代理(浏览器)发送某种标题,那么header()就是合适的。

答案 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;
    }
    ?>