2010-08-20 40 views
10

我正在開發一個Web應用程序,用於從網站(如160by2)向移動設備發送短信。如何通過PHP中的GET方法向另一個網站發送HTTP請求

我可以準備HTTP GET請求所需的URL,如SMS網關提供商smslane.com提供的API中所述,這裏是link for the 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的任何代碼被邀請:)。 )

有沒有其他方法可以做到這一點?

任何幫助,歡迎。

在此先感謝。

編輯

可以在任何一個告訴我,有沒有其他的方式來發送這個HTTP請求除了捲曲,如果該地提供代碼。

我這樣問,因爲當前的cURL代碼需要太多的時間來執行,並在60秒後失敗,我在本地系統上的php.ini中將max_execution_time增加到120,即使它對我沒有好處:(。

+0

什麼網址?請確保您清理了您的用戶名和密碼。您可能會發送錯誤的請求,意外。 – Shabbyrobe 2010-08-20 06:28:26

+0

@webdestroya我可以接受答案,如果我得到:) – srinivas 2010-08-20 06:43:47

+0

@Shabbyrobe更新問題請檢查。在這裏我提供了虛擬細節,但實際的細節我可以從控制面板發送短信給網站。 – srinivas 2010-08-20 06:46:14

回答

11

你的問題是你的方式構建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編碼的查詢字符串的護理,打造您的網址,通常使代碼看起來很多更具可讀性:

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); 
+0

+1非常好的解釋我會檢查你的建議 – srinivas 2010-08-20 10:11:07

+0

你可以請檢查我的問題的編輯。請.. – srinivas 2010-08-21 03:48:25

+0

感謝您的幫助。我接受這個答案,因爲它解決了我的問題:)歡呼聲。 – srinivas 2010-08-21 05:51:36

6
<?php 
print file_get_contents("http://some_server/some_file.php?some_args=true"); 
?> 
+0

Rook可能是我可以試試:) – srinivas 2010-08-20 06:49:41

1

沒有錯,你的代碼,我可以看到正確的了。你試過粘貼網址到瀏覽器中,所以你可以看到什麼反應?你甚至可以使用wget下載到文件的響應。我假設你想嘗試fsocket,你會使用80端口,因爲這是默認的http端口。

+0

@AIW我在瀏覽器中試過這個URL,它給出了發送消息的響應。 – srinivas 2010-08-20 06:48:55

+0

那麼你可能不會做網址編碼。還將returntransfer設置爲true。 – 2010-08-20 07:30:08

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。

+0

感謝您的信息,我從來不知道這個擴展。 – 2010-08-20 07:34:06

+0

如何在我的系統/服務器上加載HTTPRequest擴展? 我試過這個方法,但給出錯誤的擴展未加載。我無法弄清楚如何安裝該擴展。 – srinivas 2010-08-20 09:02:49

2

下面的代碼將與捲曲一個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; 
?> 
相關問題