带有自定义头的PHP POST提供HTTP 400错误请求响应(Bug?)

带有自定义头的PHP POST提供HTTP 400错误请求响应(Bug?),php,http,post,Php,Http,Post,我在使用PHP将数据从客户机发布到我们的内部站点时遇到了一些问题。服务器通过具有基本身份验证的HTTPS接受数据。以下是我用来发布的代码: $parameters = array('http' => array( 'method' => 'POST', 'content' => $data ) ); if ($optionalHeaders !== NULL) { $parameters['http']['header']

我在使用PHP将数据从客户机发布到我们的内部站点时遇到了一些问题。服务器通过具有基本身份验证的HTTPS接受数据。以下是我用来发布的代码:

$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。 有人知道这是不是一个bug吗?或者我在什么地方做错了什么。。。 我已经浏览了PHP站点,发现这个bug是为PHP的5.2.6版列出的,但是这篇文章指出了它的工作版本

谢谢,
Jak

您不应该提供所有这些标题。这注定要失败


自动提供POST、主机、内容长度和连接等标题。删除所有可选标题(应该可以),然后逐步添加。

非常好,谢谢。我去掉了那些部件,它就工作了。奇怪的是,它在另一台拥有所有头的客户机上工作。