簡體   English   中英

如何通過PHP中的GET方法將HTTP請求發送到另一個網站

[英]how to send HTTP request by GET method in PHP to another website

我正在開發一個Web應用程序,用於從160by2等網站向移動設備發送短信。

我可以准備HTTP GET請求所需的URL,如SMS Gateway提供商smslane.com提供的API中所述,這里是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,即使它對我沒有好處:(。

您的問題是您構建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);
<?php
print file_get_contents("http://some_server/some_file.php?some_args=true");
?>

下面的代碼將使用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;
?>

你的代碼沒有任何問題,我可以立即看到。 您是否嘗試將網址粘貼到瀏覽器中以便查看響應? 您甚至可以使用wget將響應下載到文件中。 我想如果你想嘗試使用端口80的fsocket,那就是默認的http端口。

嘗試使用以下代碼。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM