Заголовки HTTP Post, полученные не так, как отправляются - PullRequest
0 голосов
/ 10 июня 2009

HI Я пытаюсь отправить некоторые заголовки в моем PHP-скрипте, такие как

$headers[] = "BATCH_TYPE: XML_SINGLE"; 
$headers[] = "VENDOR_ID: 56309";

Но они принимаются как:

Пакетный-Type Vendor-ID

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

Кто-нибудь знает, почему или как сортировать?

Спасибо

<?php

function httpsPost($Url, $xml_data, $headers)
{
   // Initialisation
   $ch=curl_init();
   // Set parameters
   curl_setopt($ch, CURLOPT_FORBID_REUSE, 1); 
   curl_setopt($ch, CURLOPT_FRESH_CONNECT, 1);
   curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
   curl_setopt($ch, CURLOPT_URL, $Url);
   // Return a variable instead of posting it directly
   curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
   curl_setopt($ch, CURLOPT_USERPWD,"username:password");

   // Activate the POST method
   curl_setopt($ch, CURLOPT_POST, 1) ;
   // Request
   curl_setopt($ch, CURLOPT_POSTFIELDS, $xml_data);
   curl_setopt($ch, CURLOPT_TIMEOUT, 999);

   curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
   curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);

   // execute the connexion
   $result = curl_exec($ch);
   // Close it
   curl_close($ch);
   return $result;
}

$request_file = "./post_this.xml"; 
$fh = fopen($request_file, 'r'); 
$xml_data = fread($fh, filesize($request_file));

fclose($fh);    

$url = 'http://www.xhaus.com/headers';

$headers = array();
$headers[] = "Expect:";
$headers[] = "Accept: text/xml";

$headers[] = "BATCH_TYPE: XML_SINGLE"; 
$headers[] = "BATCH_COUNT: 1";
$headers[] = "VENDOR_ID: 54367";


$Response = httpsPost($url, $xml_data, $headers);

echo $Response;

?>

Ответы [ 4 ]

0 голосов
/ 17 июня 2009

После недели борьбы с компанией этого внешнего сервера, они фактически дали мне неправильные заголовки - Д'Ох!

0 голосов
/ 10 июня 2009

Используйте fsockopen () и пишите / читайте вручную все, что вам нужно. Я не уверен, что ваша реализация CURL или что-то в этом роде. еще как прокси не меняет ваши заголовки. Если хочешь сделать что-то хорошее наверняка - просто сделай это сам;). На самом деле так просто создать HTTP-запрос и записать его в открытый сокет ...

$req = "POST $url HTTP/1.0\n";
$headers[] = 'VENDOR_ID: 1234';
$headers[] = 'MY_OTHER_HEADER: xxxxx';
$req .= implode("\n", $headers);
$req .= "\n\n" . $request_body;

$sock = fsockopen($host, 80, $errno, $errstr, $timeout);
fwrite($sock, $req, strlen($req));

$return = '';
do 
{
    $return .= fread($sock, 512);
} while (!feof($sock));

fclose($sock);

Не уверен, но мне кажется, что-то. как это уже было сделано где-то в PEAR ...

0 голосов
/ 11 июня 2009

Измените следующий код:

curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);

К этому:

foreach($headers as $header)
    curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
0 голосов
/ 10 июня 2009

Как вы проверяете эти заголовки? Я только что попробовал себя с помощью следующего кода: -

<?php

header("BATCH_TYPE: XML_SINGLE");

И вернул следующее: -

HTTP/1.1 200 OK
Date: Wed, 10 Jun 2009 08:56:54 GMT
Server: Apache/2.2.11 (Ubuntu) PHP/5.2.6-3ubuntu4.1 with Suhosin-Patch
X-Powered-By: PHP/5.2.6-3ubuntu4.1
BATCH_TYPE: XML_SINGLE
Vary: Accept-Encoding
Content-Length: 0
Content-Type: text/html
...