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

2022-08-30 17:39:01

有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(): 内容类型未指定,假设应用程序/x-www-form-urlencoded in

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

但是当我在本地尝试脚本时,它可以完美地工作。


答案 1

您正在传递给 并且仅包含数组中的标头。所有其他标头和选项都位于您添加到但未使用的数组中。尝试:$contextsfile_get_contents()User-Agent$opts$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);

答案 2

虽然现有的答案对我不起作用,但我设法解决了这样的问题:

PHP手册说必须是格式的关联数组。有关标准流参数的列表,请参阅上下文参数。params$arr['parameter'] = $value

    $header = array(
            "Content-Type: application/x-www-form-urlencoded",
            "Content-Length: ".strlen($postdata)
        );


    $packet['method'] = "POST";
    $packet['header'] = implode("\r\n", $header);
    $packet['content'] = $postdata;

    $transmit_data = array('http' => $packet);
    $context = stream_context_create($transmit_data);


推荐