12

160by2のような Web サイトからモバイルに SMS を送信するための Web アプリケーションを開発しています。

SMS ゲートウェイ プロバイダーsmslane.comが提供する API に記載されているように、HTTP GET 要求に必要な URL を準備できます。ここに API のリンクがあります

PHP から HTTP リクエストを送信する方法は?

その目的で cURL を使用しましたが、応答が表示されません。ここに私が使用したコードがあります、

<?php 
$url="http://smslane.com/vendorsms/pushsms.aspx?user=abc&password=xyz&msisdn=919898123456&sid=WebSMS&msg=Test message from SMSLane&fl=0";
$ch = curl_init();
curl_setopt( $ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows; U; Windows NT 5.1; rv:1.7.3) Gecko/20041001 Firefox/0.10.1" );
curl_setopt( $ch, CURLOPT_URL, $url );  
$content = curl_exec( $ch );
$response = curl_getinfo( $ch );
curl_close ( $ch );
echo $content;
?>

fsockopen()ポート番号が不明なため使用されませんでした。サポート チームにポート番号をメールしました。(GET メソッドによる fsockopen のコードが招待された場合:)。)

これを行うための他の方法はありますか?

どんな助けでも大歓迎です。

前もって感謝します。

編集

cURL以外にこのHTTPリクエストを送信する他の方法があり、可能であればそのコードを教えてください。

現在のcURLコードは実行に時間がかかりすぎて60秒後に失敗するため、これを求めています.ローカルシステムのphp.iniでmax_execution_timeを120に増やしました.

4

5 に答える 5

12

問題は、URL の作成方法です。クエリ文字列にスペースを含めると、不正な形式のリクエスト URL が送信されます。

状況を再現する例を次に示します。

request.php :

<?php
$ch = curl_init();
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_URL, 
    'http://your_server/response.php?foo=yes we can&baz=foo bar'
);
$content = curl_exec($ch);
echo $content;

response.php :

<?php
print_r($_GET);

request.php の出力は次のとおりです。

Array
(
    [foo] => yes
)

この理由は、クエリ文字列が適切にエンコードされておらず、リクエストを解釈するサーバーが URL が最初のスペース (この場合はクエリの途中) で終わると想定しているためですfoo=yes we can&baz=foo bar

http_build_queryを使用して URL を構築する必要があります。これにより、クエリ文字列が適切に URL エンコードされ、通常はコードがより読みやすくなります。

echo http_build_query(array(
    'user'=>'abc',
    'password'=>'xyz',
    'msisdn'=>'1234',
    'sid'=>'WebSMS',
    'msg'=>'Test message from SMSLane',
    'fl'=>0
));

CURLOPT_RETURNTRANSFER も設定する必要があります。

curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
于 2010-08-20T06:25:20.177 に答える
8
<?php
print file_get_contents("http://some_server/some_file.php?some_args=true");
?>
于 2010-08-20T06:24:45.607 に答える
2

The below code will make a HTTP request with curl and return the response in $content.

<?php
$ch = curl_init();
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_URL,'http://www.anydomain.com/anyapi.php?a=parameters');
$content = curl_exec($ch);
echo $content;
?>
于 2013-06-12T05:36:09.310 に答える
1

次のコードを使用してみてください。

$r = new HttpRequest('http://www.xencomsoftware.net/configurator/tracker/ip.php', HttpRequest::METH_GET);
try {
        $r->send();
         echo $r->getResponseCode(); 
         if ($r->getResponseCode() == 200) 
        {
        }
    }

HttpRequest 拡張機能がロードされていることを確認してください (サーバーで object0 を共有します。

于 2010-08-20T07:16:58.397 に答える
1

私がすぐに見ることができるコードに問題はありません。応答を確認できるように、URL をブラウザーに貼り付けてみましたか? wget を使用して、応答をファイルにダウンロードすることもできます。fsocket を試してみたい場合は、デフォルトの http ポートであるポート 80 を使用すると思います。

于 2010-08-20T06:25:06.317 に答える