les en-têtes HTTP Post, reçu différemment de ce qui est envoyé
-
13-09-2019 - |
Question
Bonjour, je suis Tring d'envoyer des en-têtes dans mon script PHP comme
$headers[] = "BATCH_TYPE: XML_SINGLE";
$headers[] = "VENDOR_ID: 56309";
Mais ils sont reçus comme:
Lot-Type Fournisseur-ID
.. pas comme ils étaient destinés ou nécessaires -. Qui me cause des problèmes
Quelqu'un sait pourquoi ou comment trier?
Merci,
<?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;
?>
La solution 4
Après une semaine de lutte avec la compagnie de ce serveur externe, ils étaient en fait de me donner les mauvaises têtes - D'oh
Autres conseils
Comment vérifiez-vous ces en-têtes? Je viens moi-même essayé avec le code suivant: -
<?php
header("BATCH_TYPE: XML_SINGLE");
Et rentrer les éléments suivants: -
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
Utilisez fsockopen () et écrire / lire quoi que ce soit manuellement vous avoir besoin. Je ne suis pas sûr que votre mise en œuvre de CURL ou lissée. d'autre comme proxy ne change pas vos têtes. Si vous voulez faire quelque chose de bien sûr - le faire vous-même;). En fait, il est si facile de créer HTTP demande et écrire à la prise ouverte ...
$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);
Je ne sais pas, mais il me semble que lissée. comme cela a déjà été fait quelque part dans PEAR ...
Modifier le code suivant:
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
Pour cela:
foreach($headers as $header)
curl_setopt($ch, CURLOPT_HTTPHEADER, $header);