PHP POST с заголовком () и проблемами с плохим заголовком

Я столкнулся с ошеломляющей проблемой с отправкой заголовков в 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-запросы.

Я хочу, чтобы код перенаправлял браузер, поэтому я решил использовать этот метод.

Правильно ли я это делаю?

Есть ли другой способ, который является стандартным, и я просто не знаю?

header () отправляет заголовок ответа .

Похоже, вы хотите сделать запрос на заднем конце.

Поэтому вы, вероятно, захотите использовать завиток, чтобы сделать запрос.

Если после завершения обработки ответа вы хотите отправить какой-то заголовок пользовательскому агенту (браузеру), тогда заголовок () будет уместным.

Функции заголовка относятся к заголовкам, возвращенным клиенту, я предлагаю вам изучить использование cURL для выполнения вашего почтового запроса: http://www.php.net/cURL

Если вы хотите перенаправить пользователя на другую страницу, вы должны использовать

 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> 

Расширяясь на ответе 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); ?> 

Я пробовал простую запись в формате 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; } ?>