PHP-httppost-不正确的头
您好,我目前正试图将一个xml文件发布到外部服务器,但我得到的响应是,标题不正确。我发布的服务器需要一些标题,我想知道它们的格式是否正确,或者是否需要包含任何其他“标准”标题 我的代码是:PHP-httppost-不正确的头,php,httpwebrequest,http-headers,Php,Httpwebrequest,Http Headers,您好,我目前正试图将一个xml文件发布到外部服务器,但我得到的响应是,标题不正确。我发布的服务器需要一些标题,我想知道它们的格式是否正确,或者是否需要包含任何其他“标准”标题 我的代码是: <?php function httpsPost($Url, $xml_data, $headers) { // Initialisation $ch=curl_init(); // Set parameters curl_setopt($ch, CURLOPT_FORBID_
<?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;
?>
试试看
还是用那个
$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
链接可能有助于示例:
我对这个问题做了很多研究,但我没有任何明确的答案。我会冒险说,我认为问题在于你的标题使用了下划线而不是破折号。我想不出任何使用下划线的标准HTTP头 这是完全合法的。根据RFC 2616:
message-header = field-name ":" [ field-value ]
field-name = token
token = 1*<any CHAR except CTLs or separators>
separators = "(" | ")" | "<" | ">" | "@"
| "," | ";" | ":" | "\" | <">
| "/" | "[" | "]" | "?" | "="
| "{" | "}" | SP | HT
消息头=字段名“:“[字段值]
字段名=令牌
token=1*如果我使用本地脚本作为要发布到的脚本,则输出是正确的
本地脚本只包括
<?php
phpinfo();
?>
所以,我想问题不在于你的代码,而在于屏幕上的显示。该网站似乎将下划线替换为破折号以供显示。为什么要使用该url来显示结果,而不是您自己的phpinfo脚本?您是说将请求放入:$header[]=$xml\u data;而不是:curl_setopt($ch,CURLOPT_POSTFIELDS,$xml_data);您好,外部服务器所需的标题是什么?:$headers[0]=“BATCH\u TYPE:XML\u SINGLE”$标题[1]=“批次计数:1”$标题[2]=“供应商ID:53906”;谢谢,对不起,我希望您找到了解决方案。我被告知,问题可能是接收到的标题与发送的标题不同,例如:供应商ID作为供应商ID接收\n批处理类型作为批处理类型接收..\n有人知道如何排序吗?如果您发布有关服务器的详细信息和确切错误,可能会有所帮助您正在看到的消息。如果您碰巧使用Firebug,可能有助于发布您在此处收到的确切标题响应。问题在于接收的标题与发送的标题不同,例如:供应商ID作为供应商ID接收\n批处理类型作为批处理类型接收..\n有人知道如何排序吗
如果您将上面$url的值更改为yopu,我会明白我的意思……嗨,Steve,我完全同意您的看法-我想我发帖子给的人在某处犯了错误。从上面的代码看,它看起来是正确的,不是吗?没有明显的错误,为什么这篇文章可能不起作用,是吗?我只是拼凑了一个快速测试脚本。PHP的curl函数不会更改标题。它们是按原样发送的,但是,很有可能服务器端环境正在用-替换并“修复”案例。在PHP中,如果您试图在$\u服务器中获取头文件,它们将使用HTTP_u前缀进行大小写,并将-转换为u。原来的格式丢失了。是的,是的,不需要;在标题中不要紧,这在他们的规范中…而且uu也发生了变化。。。。我只想承认我的头球没有问题…应该是别的什么东西或是在他们的末端。谢谢你的帮助。
<?php
phpinfo();
?>