15

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バージョンを拒否したことが原因であることがわかりましたが、私の場合、なぜそれが発生しているのかわかりません。

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

4

6 に答える 6

35

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

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

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

$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);

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

于 2010-05-05T05:59:59.920 に答える
10

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

于 2010-05-03T12:42:41.440 に答える
1

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

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

于 2011-09-07T00:57:49.250 に答える
0

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

file_get_contents($api);

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

fopen($api,"r");
于 2012-08-28T15:49:57.390 に答える
0

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

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

于 2010-05-03T10:51:34.027 に答える
0

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

于 2013-06-27T11:08:39.410 に答える