PHP POST with header() and Bad header problems

2019-08-02 17:40发布

I've come across a dumbfounding issue with sending headers in PHP. I've spent about 45 minutes reading on SO and other sites and I can't come up with a legitimate reason for my problem.

I need to send a POST request to another server and I'm using the PHP header() function to set the values. I have sample code below.

    $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);

I've tried a variety of options but each of them results in the same error in my log file

malformed header from script. Bad header=POST / HTTP/1.1: php5.cgi

I'm an experience PHP programmer who just hasn't had much need to manually send HTTP post requests.

I want the code to redirect the browser so that's why I decided to use this method.

Am I doing it right?

Is there some other way that is standard and I just don't know about?

标签: php http
5条回答
forever°为你锁心
2楼-- · 2019-08-02 18:11

The header functions relate to the headers returned to the client, I suggest you look into using cURL to do your post request: http://www.php.net/cURL

查看更多
叛逆
3楼-- · 2019-08-02 18:14

header() sends a response header.

It sounds like you want to make a request, on the back end.

So you probably want to use curl to make the request.

If when you're done processing the response, you want to send some kind of header to the user agent (browser), then header() would be appropriate.

查看更多
Melony?
4楼-- · 2019-08-02 18:28

Expanding on timdev's answer, here's the cURL you'd use:

<?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); 
?>
查看更多
混吃等死
5楼-- · 2019-08-02 18:28

I have tried simple html form posting it worked for me

    <?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;
    }
    ?>
查看更多
走好不送
6楼-- · 2019-08-02 18:30

If you want to redirect user to another page, you should use

header("Location: http://domain.com/some.other.page?x=y");

If you want the user to send POST variables to the redirect page you will need to use 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>
查看更多
登录 后发表回答