【问题标题】:HTTP Post headers, received differently from what's being sentHTTP Post 标头,接收与发送的不同
【发布时间】:2009-06-10 08:23:30
【问题描述】:

您好,我想在我的 PHP 脚本中发送一些标头,例如

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

但他们被接收为:

批处理类型 供应商 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;

?>

【问题讨论】:

  • 您如何准确地发送标头?使用 header() 命令?目前,您只是将标头添加到数组中,仅此而已。向我们展示该代码,我们可以提供帮助:)
  • 如果你改变 $xml_data ="TEST";然后它会起作用你会明白我的意思。

标签: php http-headers http-post


【解决方案1】:

您如何检查这些标题?我刚刚尝试了以下代码:-

<?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

【讨论】:

  • 嗨,我一直在使用网站 www.xhaus.com/headers 以及我尝试连接的外部服务器的错误日志。
【解决方案2】:

使用fsockopen() 并手动写入/读取您需要的任何内容。我不确定您是执行 CURL 还是 smth。其他像代理不会改变你的标题。如果你想确定地做一些好事 - 就自己做吧;)。实际上创建 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);

不确定,但在我看来,那个smth。像这样已经在 PEAR 的某个地方完成了......

【讨论】:

    【解决方案3】:

    更改以下代码:

    curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
    

    到这里:

    foreach($headers as $header)
        curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
    

    【讨论】:

    • 不,这不起作用。它必须是 foreach($headers as $header) { curl_setopt($ch, CURLOPT_HTTPHEADER, array($header)); ..但即便如此,也只会发送数组中的最后一个元素....
    【解决方案4】:

    在与这家外部服务器公司争吵一周后,他们实际上给了我错误的标题 - 哦!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-01-17
      • 1970-01-01
      • 1970-01-01
      • 2013-03-12
      • 1970-01-01
      • 1970-01-01
      • 2017-11-27
      • 1970-01-01
      相关资源
      最近更新 更多