我在使用PHP将数据从客户端计算机发布到我们的内部网站时遇到了一些麻烦。服务器通过HTTPS接受基本身份验证的数据。这是我用来POST的代码:
$parameters = array('http' => array(
'method' => 'POST',
'content' => $data
)
);
if ($optionalHeaders !== NULL) {
$parameters['http']['header'] = $optionalHeaders;
}
$ctx = stream_context_create($parameters);
$fp = fopen($url, 'rb', false, $ctx);
使用以下标题:
$postHeader = "POST /index.php HTTP/1.1\r\n".
"Host:my.host\r\n".
"Content-Type: application/x-www-form-urlencoded\r\n".
"User-Agent: PHP-Code\r\n".
"Content-Length: " . strlen($postData) . "\r\n".
"Authorization: Basic ".base64_encode($user.':'.$password)."\r\n".
"Connection: close\r\n";
现在,我可以让它工作,并且它在我的一个客户端上使用PHP 5.2.5版本发布,但在另一个客户端上我收到此错误消息:
fopen(magical_url): failed to open stream: HTTP request failed! HTTP/1.1 400 Bad Request
Apache错误日志给出:
request failed: error reading the headers
我能看到的唯一区别是后者客户端有PHP版本5.1.6。 有谁知道这是一个错误吗?或者我在某处做错了什么...... 我查看了PHP网站,发现这个错误列在PHP {5}的5.2.6版本中,但是这个版本发布了它的版本!
谢谢, JAK
答案 0 :(得分:2)
您不应提供所有这些标头。这肯定会失败。
自动提供POST,主机,内容长度和连接等标头。删除所有可选标题(然后应该工作)并逐步添加它们。