带有自定义 header 的 PHP POST 给出 HTTP 400 错误请求响应(错误?)

标签 php http post

我在使用 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/

相关文章:

php - 检查两列条件

php - Symfony:使用 querybuilder 构建连接两个表的选择选项

c++ - 分析帖子请求

iOS asihttp请求如何记录表单

c# - 将文件放入 Request.Files

python - 使用 Django 编写文件上传 API

javascript - TinyMCE & MoxieManager : url from MoxieManager won't be passed to TinyMCE

javascript - 将此 PHP RS232 代码移植到 Node.js

java - MailChimp 3.0 HTTP POST Json 示例

javascript - 在 angular2 中使用 http 访问 Amazon s3