web-dev-qa-db-ja.com

PHPのGETメソッドでHTTPリクエストを別のウェブサイトに送信する方法

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

SMSゲートウェイプロバイダー smslane.com 、ここに リンク)が提供するAPIに記載されているように、HTTPGETリクエストに必要な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に増やしましたが、うまくいきませんでした:(。

11
srinivas

あなたの問題はあなたが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を作成する必要があります。これにより、クエリ文字列のurlencodingが適切に処理され、通常、コードがより読みやすくなります。

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);
11
Shabbyrobe
<?php
print file_get_contents("http://some_server/some_file.php?some_args=true");
?>
8
rook

以下のコードは、curlを使用してHTTPリクエストを作成し、$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;
?>
2
Yogesh V Patil

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

1
Al W

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

$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を共有)がロードされていることを確認してください。

1
Elixir Techne