Transacciones HTTP usando PHP
Una modalidad muy de moda en estos días es el establecimiento de servidores de transacciones HTTP o HTTPS (Usando SSL), muchas veces el propósito de estos servidores es hacer de gateway para solicitar servicios a una determinada red de servidores, o dicho de otra forma centralizar todo en una máquina (o como yo en un archivo jeje).
Para generar transacciones HTTP muchas veces es necesario que un script simule postear datos a un script como si los datos vinieran de un formulario HTML (por ejemplo mis horripilantes implementaciones utilizando sockets, gracias a un comentario de Pedro Santana)
Bueno, y como ya es costumbre, los fines de semana me la paso encerrado en mi cuarto, ¡sin conexión a internet! así que pues me tengo que poner a leer, estudiar o hacer otra tontería y bueno por ahí en mis viejos libros de PHP me encuentro con estas dos modalidades para implementar Transacciones HTTP con PHP.
- Método 1: Usando CURL.
- Método 2: Usando la clase http_post (Que sinceramente no le encontré por ninguna parte en la Web, pero el libro dice que la diseño ¿Alan van den Bosch? :-S).
Cabe señalar que jamás me hubiera imaginado encontrar este tema, con el nombre Transacciones HTTP jeje.. Alguna vez lo necesite, y lo hice como dios me dió a entender, pero funcional. Así que ahora con esto, pues saquen sus conclusiones, y a hacerlo de la mejor o mas agradable forma. :P
Curl es una pequeña utilidad que corre en Unix o Windows y permite generar paquetes HTTP de todo tipo, desde PHP podemos llamar a CURL como un programa externo para generar la transacción de la forma:
- <?
- $data="var1=uno&var2=dos&var3=tres";
- $URL="http://www.mis-algoritmos.com/getme_by_POST.php";
- exec("/usr/local/bin/curl -m 120 -d "$data 0" http://$URL -L",$return_msg_array,$return_number);
- for($i=0;$i<count($return_msg_array);$i++){
- $results=$results.$return_msg_array[$i];
- }
- print("Resultado: $results n");
- ?>
Como vemos curl es llamado usando la función exec al ser un programa externo, $data tiene los datos a enviar en formato var1=uno&var2=dos&var3=tres (Igual que en mi script).
Si no se quiere usar un programa externo podemos usar la clase http_post, que permite postear datos en un servidor, un ejemplo de uso de esta clase es:
- <?
- include('class_post.php');
- $a=new http_post;
- $a->set_action("http://www.mis-algoritmos.com/getme_by_POST.php");
- $a->set_element("hola","mundo")
- $res=$a->send(0);
- print("Resultado: $res");
- ?>
Como vemos en este script hacemos lo mismo que en el anterior, la diferencia principal radica en que esta clase devuelve como resultado toda la salida del web server (incluyendo header) (Como también en mi ejemplo jeje)
La clase utiliza las funciones de networking de php (Igual que mi script :P ) para conectarse al servidor indicado y enviar usando método post los datos que se desean.
pecesama
2006-10-02 13:48:36
y ahora que hice?
Victor
2006-10-02 14:19:09
Pues me dijiste que utilizára Sockets para enviar por POST sin formulario, aunque.. Nunca me dijiste <em>como</em>.. por eso se llama <strong>Horrible implementación</strong>.
Si no huviera sido por el comentario que me diste, no huviera hecho nada jeje.
¿ahora si ya sabes que hiciste? :D
pecesama
2006-10-02 16:19:57
entonces hice algo bueno... creo... :D
Victor
2006-10-02 16:37:43
yes!
jorge
2006-11-19 13:37:32
ola muxo gusto miren yo estoy estudiando la preparatoria kon la especialidad en computacion kmo programador y estoy viendo codificaciones y pa ser verdad se me dificultan mucho alguien de ustedes ke sepan y las dominen ke me pudieran ayudar se los agradeseria mandenme un correo o agregenme
jars.rammstein@gmail.co x favor bueno bye
Uriel
2007-04-25 18:21:19
Intenté hacer una implementación de la clase http_post, pero, cómo bien dice el autor, no hay mucha información, así que les planteo mi situación haber si me pueden ayudar:
Quiero extraer el resultado de darle seguimiento a un # de guia dentro de <a href="www.estafeta.com.mx" rel="nofollow">estafeta.com.mx</a>, para esto se necesita enviar en número de guia (idGuia) a la página <a href="http://rastreo.estafeta.com:7001/ConsultaEnvios/rastreoInternetEsp.jsp" rel="nofollow">http://rastreo.estafeta.com:7001/ConsultaEnvios/rastreoInternetEsp.jsp</a>
No sé que estoy haciendo mal, ya que no me está regersando nada la conección. Les comparto el código haber si mi error es evidente:
include('http_post.php');
$a = new http_post;
$a->set_action("http://rastreo.estafeta.com:7001/ConsultaEnvios/rastreoInternetEsp.jsp");
$a->set_element("VerHist","no");
$a->set_element("idGuia", $_GET['guia']);
$result = $a->send(0);
print("Resultado: $result ");
waremovil
2007-06-30 05:18:49
Por fin lo he hecho funcionar! pero me queda una duda: la propiedad "set elements" ¿cómo defino el nombre de las variables get que quiero enviar?
por ahora para que me funcione tengo que usar este formato (ejemplo):
$a->set_action("http://www.mis-algoritmos.com/getme_by_POST.php?variable=valor&var2=valor2");
un saludo, gracias por este script
waremovil
2007-06-30 05:30:02
Ok solucionado, no lo había entendido bien. Los parámetros se ván declarando con el método set_element en pares, es decir:
$a->set_element("varabile","valor");
$a->set_element("var2","valor2");
es un script extremadamente útil
gracias!
Victor De la Rocha
2007-06-30 11:40:09
Así es waremovil, disculpa que no te haya contestado,... no me llegó email de tu comentario :S
efrayn
2007-07-09 14:21:50
saludos amigos espero esten bien, quisiera saber si pueden como instalo el curl en php bajo plataforma windows porque tengo la libreria curl pero no puedo instalarla en php. saludos
Victor De la Rocha
2007-07-09 15:36:10
http://www.tonyspencer.com/2003/10/22/curl-with-php-and-apache-on-windows/
Jose Ignacio Callejas Rojas
2007-08-10 20:32:02
Que bueno que existen este tipo de servicio para que la gente que los necesite los pueda utilisar, como en este caso necesitamos enviar un mensaje, hasta tapachula chiapas, nueva libertad