2010-08-20 7 views
10

Sto sviluppando un'applicazione Web per l'invio di SMS al cellulare dal sito Web come 160by2.come inviare la richiesta HTTP tramite il metodo GET in PHP a un altro sito Web

Posso preparare l'URL richiesto per la richiesta HTTP GET come menzionato nell'API fornita dal provider di gateway SMS smslane.com, ecco lo link for the API.

come inviare la richiesta HTTP da PHP?

Ho usato cURL per questo scopo ma la risposta non viene visualizzata. qui è il codice che ho usato,

<?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() non è stato utilizzato perché il numero di porta sconosciuta, inviato il team di supporto per il numero di porta. (se viene invitato un codice per fsockopen attraverso il metodo GET :).)

esistono altri metodi per farlo?

ogni aiuto è benvenuto.

Grazie in anticipo.

EDIT

qualcuno potrebbe dirmi c'è qualche altro modo per inviare questa richiesta HTTP tranne cURL e, se possibile, il codice dare per questo.

Sto chiedendo questo perché il codice CURL corrente impiega troppo tempo per l'esecuzione e fallisce dopo 60 secondi, ho aumentato max_execution_time a 120 in php.ini sul mio sistema locale anche se non sta facendo del bene per me :(.

+0

Cosa c'è l'URL? Assicurati di disinfettare il tuo nome utente e password. Potresti inviare una richiesta errata per errore – Shabbyrobe

+0

@webdestroya potrei accettare le risposte se ho ricevuto :) – srinivas

+0

@Shabbyrobe ha aggiornato la domanda per favore controlla. qui ho fornito i dettagli fittizi ma per i dettagli reali posso inviare SMS dal pannello di controllo sul sito web indicato. – srinivas

risposta

11

il tuo problema è il modo in cui si è cons tructing l'URL. Gli spazi inclusi nella stringa di query generano un URL di richiesta non valido inviato.

Ecco un esempio che replica le circostanze:

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

L'uscita del request.php è :

Array 
(
    [foo] => yes 
) 

Il motivo di ciò è che la stringa di query non è codificata correttamente e il server che interpreta la richiesta presuppone che l'URL termini nel primo spazio, che in questo caso è nel mezzo della query: foo=yes we can&baz=foo bar.

È necessario costruire il vostro URL utilizzando http_build_query, che si prenderà cura di urlencoding vostra stringa di query correttamente e in generale rende il codice aspetto molto più leggibile:

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

È inoltre necessario impostare CURLOPT_RETURNTRANSFER:

curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
+0

+1 per una spiegazione molto buona controllerò il tuo suggerimento – srinivas

+0

potresti per favore controllare la modifica della mia domanda. per favore .. – srinivas

+0

grazie per questo aiuto. Lo accetto come risposta perché ha risolto il mio problema :) evviva. – srinivas

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

Rook potrebbe essere che potrei provare questo :) – srinivas

1

niente di sbagliato con il codice che posso vedere a destra fuori. hai provato incollando l'URL in un browser in modo da poter vedere la risposta? si potrebbe anche usare wget per scaricare la risposta ad un file. I supponiamo che se si vuole provare fsocket che si usa la porta 80 come questo è la porta di default http.

+0

@AIW ho provato l'URL nel browser e ha dato la risposta che il messaggio inviato. – srinivas

+0

quindi potresti non eseguire la codifica url. imposta anche returntransfer su true. –

1

Provare a utilizzare il seguente codice.

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

assicurarsi di aver caricato HttpRequest estensione (quota object0 nel server.

+0

grazie per le informazioni, non ho mai saputo di questa estensione. –

+0

come caricare l'estensione HTTPRequest sul mio sistema/server? ho provato quel metodo ma ho dato un errore per l'estensione non caricata. non riuscivo a capire come installare quell'estensione. – srinivas

2

Il codice di seguito farà una richiesta HTTP con l'arricciatura e restituire la risposta 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; 
?>