PHP - Тип содержимого, не заданный приложением/x-www-form-urlencoded
В течение 2 дней у меня возникают проблемы с моим PHP script на моем сервере. Я ничего не изменил, и внезапно это не сработало.
Вот код:
$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(): тип содержимого, не указанный в предположении application/x-www-form-urlencoded в
Предупреждение: file_get_contents (https://mobile.dsbcontrol.de): не удалось открыть поток: HTTP-запрос не удался! Внутренний сервер HTTP/1.1 500 Ошибка в
Но когда я пытаюсь выполнить script локально, он отлично работает.
Ответы
Ответ 1
Вы передаете $contexts
в file_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);