2010-08-20 12 views
10

Estoy desarrollando una aplicación web para enviar SMS al móvil desde el sitio web como 160by2.cómo enviar solicitud HTTP por el método GET en PHP a otro sitio web

Puedo preparar la URL requerida para la solicitud HTTP GET como se menciona en la API proporcionada por el proveedor de SMS Gateway smslane.com, aquí está el link for the API.

cómo enviar la solicitud HTTP desde PHP?

Utilicé cURL para ese propósito pero la respuesta no se muestra. aquí está el código i utilizada,

<?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() no se utilizó porque el número de puerto desconocido, envió el equipo de soporte de número de puerto. (si se invita a cualquier código para fsockopen a través del método GET :).)

¿Hay algún otro método para hacer esto?

cualquier ayuda es bienvenida.

Gracias de antemano.

EDITAR

Podría alguien decirme ¿hay alguna otra manera de enviar esta solicitud HTTP excepto cURL código y si es posible dar por ello.

Pregunto esto porque el código cURL actual toma demasiado tiempo para la ejecución y falla después de 60 segundos, aumenté max_execution_time a 120 en php.ini en mi sistema local aunque no me está yendo bien :(.

+0

¿Qué hay la URL? Por favor, asegúrese de desinfectar su nombre de usuario y contraseña. Podría estar enviando una solicitud incorrecta por accidente. – Shabbyrobe

+0

@webdestroya podría aceptar respuestas si tengo :) – srinivas

+0

@Shabbyrobe ha actualizado la pregunta, por favor revise. aquí proporcioné los detalles del dummy, pero para detalles reales, puedo enviar SMS desde el panel de control del sitio web. – srinivas

Respuesta

11

Su problema es la forma en que está en contra dirigiendo la URL. Los espacios que está incluyendo en la cadena de consulta darán como resultado el envío de una URL de solicitud mal formada.

Este es un ejemplo que se replica a sus circunstancias:

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

La salida de request.php es :

Array 
(
    [foo] => yes 
) 

La razón de esto es que la cadena de consulta no está codificada correctamente y el servidor que interpreta la solicitud asume que la URL termina en el primer espacio, que en este caso está en el medio de la consulta: foo=yes we can&baz=foo bar.

Es necesario construir la URL con http_build_query, que se hará cargo de URLEncoding su cadena de consulta adecuada y en general hace que el código se parecen mucho más legible:

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

También es necesario establecer CURLOPT_RETURNTRANSFER:

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

+1 por una muy buena explicación verificaría su sugerencia – srinivas

+0

podría revisar la edición de mi pregunta. por favor .. – srinivas

+0

gracias por esta ayuda. Estoy aceptando esto como respuesta porque resolvió mi problema :) aplausos. – srinivas

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

Rook puede intentarlo :) – srinivas

1

nada malo con su código que puedo ver de inmediato. ¿ha intentado pegar la URL en un navegador para que pueda ver la respuesta? incluso se podría utilizar wget para descargar la respuesta a un archivo. yo Supongamos que si quiere probar Fsocket, debería usar el puerto 80 ya que es el puerto http predeterminado.

+0

@AIW probé la url en el navegador y se le dio la respuesta que envió ese mensaje. – srinivas

+0

, entonces es posible que no esté haciendo la codificación url. también establezca returntransfer en true. –

1

Intente usar el siguiente código.

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

asegúrese de que ha cargado HttpRequest extensión (object0 participación en su servidor.

+0

gracias por la información, nunca supe de esta extensión. –

+0

cómo cargar la extensión HTTPRequest en mi sistema/servidor? intenté con ese método pero me dieron un error por la extensión no cargada. No pude encontrar la manera de instalar esa extensión. – srinivas

2

El código siguiente hará una petición HTTP con el enrollamiento y devolver la respuesta en $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; 
?> 
Cuestiones relacionadas