PHP - 假定应用程序/x-www-form-urlencoded 未指定内容类型

新手上路,请多包涵

连续 2 天,我的服务器上的 PHP 脚本出现问题。我没有改变任何东西,突然它不再起作用了。

这是代码:

 $query = http_build_query($data);
$options = array(
    'http' => array(
        'header' => "Content-Type: application/x-www-form-urlencoded\r\n".
                    "Content-Length: ".strlen($query)."\r\n",
        'method'  => "POST",
        'content' => $query,
    ),
);
$opts = array('http'=>array('header' => "User-Agent:MyAgent/1.0\r\n",'method'  => 'POST',
        'content' => http_build_query($data),));
$contexts = stream_context_create($opts);
$context  = stream_context_create($options);
$result = file_get_contents($url, false, $contexts, -1, 40000);

我收到这些错误消息:

注意:file_get_contents(): Content-type not specified assuming application/x-www-form-urlencoded in

警告:file_get_contents( https://mobile.dsbcontrol.de ):无法打开流:HTTP 请求失败! HTTP/1.1 500 内部服务器错误

但是当我在本地尝试脚本时,它运行得很好。

原文由 hannsch 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 671
2 个回答

You are passing $contexts to file_get_contents() and that only contains the User-Agent header in the $opts array.所有其他标头和选项都在 $options 数组中,您将其添加到 $context 但未使用。尝试:

 $query = http_build_query($data);
$options = array(
    'http' => array(
        'header' => "Content-Type: application/x-www-form-urlencoded\r\n".
                    "Content-Length: ".strlen($query)."\r\n".
                    "User-Agent:MyAgent/1.0\r\n",
        'method'  => "POST",
        'content' => $query,
    ),
);
$context = stream_context_create($options);
$result = file_get_contents($url, false, $context, -1, 40000);

原文由 AbraCadaver 发布,翻译遵循 CC BY-SA 3.0 许可协议

我在用这个

$url = '';

$result = json_decode(file_get_contents($url, false, stream_context_create(array(
            'http' => array(
                'method'  => 'POST',
                'header' => 'Content-type:application/x-www-form-urlencoded',
                'content' => http_build_query($dataQuery)
            )
        ))), true);

原文由 Rachid Loukili 发布,翻译遵循 CC BY-SA 4.0 许可协议

推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏