我在使用 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。 有谁知道这是否是一个错误?还是我在某个地方做错了什么...... 我浏览了 PHP 网站,发现 PHP 5.2.6 版本列出了这个错误 https://bugs.php.net/bug.php?id=45540但这篇文章发布了它所适用的版本!
谢谢, jack
最佳答案
您不应该提供所有这些 header 。那注定会失败。
系统会自动提供 POST、Host、Content-Length 和 Connection 等 header 。删除所有可选 header (然后应该可以工作)并逐步添加它们。
关于带有自定义 header 的 PHP POST 给出 HTTP 400 错误请求响应(错误?),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6549948/