PHP - HTTP Post - hatalı başlıkları

3 Cevap php

Merhaba ben şu anda harici bir sunucuya bir xml dosyayı göndermek için çalışıyorum, ama ben başlıkları yanlış bir yanıtı geri alıyorum. Ben ilanı olduğum sunucu bazı başlıkları gerektirir ve doğru biçimde ya da dahil edilmesi gereken başka bir "standart" başlıkları varsa eğer ben merak ediyorum?

Benim kod:

<?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");
   // Active the POST method
   curl_setopt($ch, CURLOPT_POST, 1) ;
   // Request
   curl_setopt($ch, CURLOPT_POSTFIELDS, $xml_data);
   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;
}

$headers[0]="BATCH_TYPE: XML_SINGLE"; 
$headers[1]="BATCH_COUNT: 1"; 
$headers[2]="VENDOR_ID: 53906";

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

$url = 'http://www.example.com/test.php';

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

echo $Response;

?>

3 Cevap

Ben bu araştırma bir demet yaptık, ama ben kesin bir cevabım yok. Ben bir uzuv çıkmak ve ben sorun başlıklarını yerine tire kullanarak olmasıdır düşünüyorum söylerim. Ben çizgi kullanan herhangi bir standart HTTP başlığının düşünemiyorum.

Bu HTTP 1.1 specification başına tamamen yasaldır. RFC 2616 göre:

message-header = field-name ":" [ field-value ]
field-name     = token
token          = 1*<any CHAR except CTLs or separators>
separators     = "(" | ")" | "<" | ">" | "@"
                  | "," | ";" | ":" | "\" | <">
                  | "/" | "[" | "]" | "?" | "="
                  | "{" | "}" | SP | HT

Bu bir seçenek, ben Toplu-Type, Toplu Kont ve Satıcıları-Id'nizi beklemek sunucuyu değiştirmeyi önermek.

Curl arkana başlık isimleri değişiyor ise, gereken report it as a bug.

denemek

curl_setopt($ch, CURLOPT_HTTPHEADER, Array("Content-Type: text/xml")); 
curl_setopt($ch, CURLOPT_HTTPHEADER, Array("Accept: text/xml"));

ya da kullanan

$header[] = "Host: ".$host; 
$header[] = "MIME-Version: 1.0"; 
$header[] = "Accept: text/xml";
$header[] = "Content-length: ".strlen($xmlRequest);
$header[] = "Cache-Control: no-cache";
$header[] = "Connection: close \r\n";
$header[] = $xmlRequest; // Contains the XML request

link maybe help with example: http://www.nabble.com/Problems-posting-xml-file-with-curl-and-php-td16129807.html

Ben nakledilen komut dosyası olarak yerel bir komut dosyası kullanıyorsanız, çıkış doğrudur.

Yerel komut sadece oluşur

<?php
  phpinfo();
?>

Yani, sorun kodu ile ancak http://www.xhaus.com/headers de ekran ile değil sanırım. Bu site ekran için tire ile çizgi yerine görünüyor. Neden kendi Phpinfo-komut sonuçları gösteren ve bu konuda değil url kullanmak?