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