web-dev-qa-db-ja.com

HTTPリクエストが失敗しました! HTTP / 1.1 505HTTPバージョンはサポートされていませんエラー

file_get_contents()を使用してサーバーから応答を取得しようとしていますが、このエラーが発生しました。誰かが理由とそれを修正する方法を教えてもらえますか?コードの一部は次のとおりです。

$api = "http://smpp5.routesms.com:8080/bulksms/sendsms?username=$username&password=$password&source=$source&destination=$destin&dlr=$dlr&type=$type&message=$message";
$resp = file_get_contents($api);

ブラウザにURLを貼り付けている間、サーバーは正しく応答しました。これは、サーバーがクライアントのHTTPバージョンを拒否したことが原因であることがわかりましたが、私の場合、なぜそれが発生しているのかわかりません。

どんな助けでも大歓迎です。前もって感謝します

14
shyam

私は問題を見つけました、そしてそれは単純なコーディングエラーでした-urlエンコーディングがありません。

最初は気づかなかったのは、編集する前にコードに問題がなく、サーバーを呼び出す前にurlencode()関数を見逃していたため、URLにスペースができていたためです。

これが、ほとんどの人にこのエラーが発生する理由のようです。したがって、これが発生した場合は、URLパラメータとして使用される値に空白が含まれている可能性のあるすべての変数でurlencode()を使用してください。したがって、私の質問の場合、修正されたコードは次のようになります。

$api = "http://smpp5.routesms.com:8080/bulksms/sendsms?username=$username&password=$password&source=$source&destination=$destin&dlr=$dlr&type=$type&message=" . urlencode($message);
$resp = file_get_contents($api);

また、すべての時間と応答に感謝します、それらは情報提供でした。

30
shyam

ストリームコンテキストを作成 HTTPバージョンを1.0に設定し、そのコンテキストをfile_get_contentsで使用できます。

$options = array(
    'http' => array(
        'protocol_version' => '1.0',
        'method' => 'GET'
    )
);
$context = stream_context_create($options);
$api = "http://smpp5.routesms.com:8080/bulksms/sendsms?username=$username&password=$password&source=$source&destination=$destin&dlr=$dlr&type=$type&message=$message";
$resp = file_get_contents($api, false, $context);

ちなみに、URI引数の値をurlencodeで適切にエスケープすることを忘れないでください。

9
Gumbo

私は同じ問題に遭遇しました、そして私の場合、原因はリクエストURLの終わりにある誤った改行/ CRLF文字でした、それはurlencode()によって捕らえられません(あるいはそれはそれをエンコードしますがそれでもサーバーでエラーが発生します)。問題を見つけると、ストリームコンテキストオプションがなくても、リクエストが再び機能し始めました。

うまくいけば、これは他の人を助けるでしょう。

0
therealklanni

私もこれと同じ問題に直面していました。後で、mysqlから結果を取得しているときに、$ countを制限すると、$ countが-veであることがわかりました。 URLが正常に機能することを修正しました。 URLのみに問題があり、file_get_contentsやhttpバージョンの問題ではありません。

0
kanchan

ワイヤーで何が起こっているのかを嗅ぐことができますか? HTTPリクエストがネットワーク上で送信されるときに、そのフォーマットを確認することは非常に役立ちます。

それを見ずに、私の最善の推測は、サーバーが適切に実装されておらず、HTTP /1.1要求を拒否していることです。設定してみてください--http1.0カールで、何が起こるかを見て...

0
Mark Nottingham

まだエラーが発生する場合があります

file_get_contents($api);

その場合は、これを試してください。

fopen($api,"r");
0
LIGHT