web-dev-qa-db-ja.com

PHP-application / 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():application/x-www-form-urlencodedを想定してコンテンツタイプが指定されていません

警告:file_get_contents( https://mobile.dsbcontrol.de ):ストリームを開けませんでした:HTTPリクエストが失敗しました! HTTP/1.1 500内部サーバーエラー

しかし、スクリプトをローカルで試すと、完全に機能します。

19
hannsch

_$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);
_
31
AbraCadaver

既存の答えは私にとってはうまくいきませんでしたが、私はこのように問題を解決することができました:

PHP Manual は、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' => $パケット); 
 $ context = stream_context_create($ transmit_data); 
 
0
Misaq