Foros del Web » Programando para Internet » PHP »

Php post http request

Estas en el tema de Php post http request en el foro de PHP en Foros del Web. Buen día expertos Estoy intentando enviar un mensaje JSON a un servidor HTTP externo en php usando el metodo POST, nunca he hecho peticiones HTTP, ...
  #1 (permalink)  
Antiguo 15/01/2013, 16:11
 
Fecha de Ingreso: abril-2006
Ubicación: miraflores
Mensajes: 69
Antigüedad: 18 años
Puntos: 1
Php post http request

Buen día expertos

Estoy intentando enviar un mensaje JSON a un servidor HTTP externo en php usando el metodo POST, nunca he hecho peticiones HTTP, sin embargo he llegado hasta este punto:

--Como aprecian envío el mensaje JSON ya codificado:
Código PHP:
<?php
$host 
="10.10.237.8";
$puerto 21098;
$BUFF 2048;
$socket socket_create(AF_INETSOCK_STREAMSOL_TCP);
$conexion socket_connect($socket$host$puerto);
if(
$conexion)
{
    
$msisdn=$_POST["msisdn"];
    
$mensaje=$_POST["mensaje"];
    
$php_array = array(
    
"numero" => $msisdn,
    
"mensaje" => "$mensaje",
    );
    
$json_array=json_encode($php_array);
    echo 
"Conexion Exitosa, puerto: " $puerto."\n\n";
    echo 
$json_array;
    
socket_write($socket$json_array);

    
$server_response socket_read($socket$BUFF); // Receive the results (if any) from the server
    
$decoded_response json_decode($server_responsetrue); // decode the data received
    
echo $decoded_response['passphrase']; // and spit the results
}
else
{
    echo 
"\nLa conexion TCP no se pudo realizar, puerto: ".$puerto;
}
socket_close($socket);
?>
Sin embargo no tengo la mas minima idea de donde meter esta informacion importante:

Código HTML:
POST /SMBULK/BATCH HTTP/1.0
Authorization: Basic dGVzdDp0ZXN0
Host: 10.10.237.8:21098
Content-Length: 395
User-Agent: Wget/1.12 (solaris2.10)
Content-Type: application/x-www-form-urlencoded
Connection: Keep-Alive
Accept: */*
Preguntas:

- Donde debo incluir dicha información requerida por el servidor http ?
__________________
Patrick:policia:
  #2 (permalink)  
Antiguo 15/01/2013, 16:41
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Respuesta: Php post http request

¿Porque no usas cURL? Te puede facilitar la vida bastante, en su caso las cabeceras normalmente se escriben primero, antes de escribir el contenido.

Saludos.
  #3 (permalink)  
Antiguo 16/01/2013, 11:10
 
Fecha de Ingreso: abril-2006
Ubicación: miraflores
Mensajes: 69
Antigüedad: 18 años
Puntos: 1
Respuesta: Php post http request

Intento encontrar un buen ejemplo de cURL usando POST y enviando las cabeceras que menciono lineas arriba, pero no lo consigo, puedes ayudarme ?
__________________
Patrick:policia:
  #4 (permalink)  
Antiguo 16/01/2013, 11:23
Avatar de andresdzphp
Colaborador
 
Fecha de Ingreso: julio-2011
Ubicación: $this->Colombia;
Mensajes: 2.749
Antigüedad: 12 años, 9 meses
Puntos: 793
Respuesta: Php post http request

Revisa este aporte, con ejemplos muy buenos:

[APORTE] file_get_contents(), cURL, HTTP_Request
__________________
Si sabemos como leer e interpretar el manual será mucho más fácil aprender PHP. En lugar de confiar en ejemplos o copiar y pegar - PHP
  #5 (permalink)  
Antiguo 16/01/2013, 19:58
 
Fecha de Ingreso: abril-2006
Ubicación: miraflores
Mensajes: 69
Antigüedad: 18 años
Puntos: 1
Respuesta: Php post http request

Gracias, revise el aporte ofrecido líneas arriba y conseguí hacer esto, que podría estar mal ? que me falta ? cuando lo compilo parece que se queda cargando la página pero no sucede nada mas:

Código PHP:
<?php
$str_obj_json
='{
"method":"SUBMIT","params":{
"batchType":"submit",
"batchId":"alvarons",
"origAddr":"550",
"origTon":2,
"userData":"Movistar les desea Feliz Navidad",
"submits":
  [
   {
   "messId":"mess127_001",
   "destAddr":"51975375377"}
  ]
}
}'
;
$ch curl_init('http://10.10.237.8:21098/SMBULK/BATCH');
curl_setopt($chCURLOPT_CUSTOMREQUEST"POST");
curl_setopt($chCURLOPT_POSTFIELDS$str_obj_json);
curl_setopt($chCURLOPT_RETURNTRANSFERtrue);
curl_setopt($chCURLOPT_HTTPHEADER, array(
    
'Content-Type: application/x-www-form-urlencoded',
    
'Content-Length: 395',
    
'Authorization: Basic dGVzdDp0ZXN0',
    
'User-Agent: Wget/1.12 (solaris2.10)',
    
'Connection: Keep-Alive',
    
'Accept: */*')
);
$result curl_exec($ch);
?>
__________________
Patrick:policia:
  #6 (permalink)  
Antiguo 16/01/2013, 20:21
Avatar de dashtrash
Colaborador
 
Fecha de Ingreso: abril-2007
Ubicación: Ni en Sevilla,ni en Sanlúcar..qué más da..
Mensajes: 927
Antigüedad: 17 años
Puntos: 270
Respuesta: Php post http request

-No uses CURLOPT_CUSTOMREQUEST. Utiliza CURL_POST, true.
-Mira en el manual cómo se pasan los parametros por POST.Tienes que utilizar el formato <nombre_variable_post>=urlencode($str_to_json)
  #7 (permalink)  
Antiguo 17/01/2013, 20:02
 
Fecha de Ingreso: abril-2006
Ubicación: miraflores
Mensajes: 69
Antigüedad: 18 años
Puntos: 1
Respuesta: Php post http request

No se que pasa, no me sale, miren ahora el cambio que hice al código, siento que los headers o el objeto json no estan siendo bien enviados:

Código PHP:
<?php
$str_obj_json
='{
"method":"SUBMIT",
"params":{
        "batchType":"submit",
  "batchId":"alvarons17",
  "origAddr":"550",
  "origTon":2,
  "userData":"Feliz Navidad Movistar",
"submits":
  [
   {"messId":"mess127_001",
   "destAddr":"51971855080"}
  ]
}
}'
;
$headers=array(
'Authorization: Basic dGVzdDp0ZXN0',
'Content-Length: 395',
'Content-Type: application/x-www-form-urlencoded',
'Connection: Keep-Alive',
'Accept: */*');
$url='http://10.10.237.8:21098/SMBULK/BATCH';
$ch curl_init();
curl_setopt($chCURLOPT_URL$url);
curl_setopt($chCURLOPT_POSTTRUE);
curl_setopt($chCURLOPT_POSTFIELDS$str_obj_json);
curl_setopt($chCURLOPT_RETURNTRANSFERTRUE);
curl_setopt($chCURLOPT_HTTPHEADER$headers);
$result curl_exec($ch);
curl_close($ch);
echo 
$result;
?>
__________________
Patrick:policia:
  #8 (permalink)  
Antiguo 18/01/2013, 13:28
 
Fecha de Ingreso: abril-2006
Ubicación: miraflores
Mensajes: 69
Antigüedad: 18 años
Puntos: 1
De acuerdo Respuesta: Php post http request

Finalmente lo conseguí, mi servidor HTTP recibió el objeto, el único cambio que hice fue usar:

Código HTML:
'Content-Length:'.strlen($str_obj_json),
en vez de:
Código HTML:
'Content-Length: 395', 
Este es el código completo para vuestro uso:

Código PHP:
<?php
$str_obj_json
='{
"method":"SUBMIT","params":{
"batchType":"submit",
"batchId":"alvarons50",
"origAddr":"550",
"origTon":2,
"userData":"Movistar les desea un feliz dia",
"submits":
  [
   {
   "messId":"mess127_001",
   "destAddr":"51971855080"},
  {
   "messId":"mess127_002",
   "destAddr":"51999040363"},
  {
   "messId":"mess127_003",
   "destAddr":"51975293266"},
   {
   "messId":"mess127_004",
   "destAddr":"51975375377"}
  ]
}
}'
;

$headers=array(
'Authorization: Basic dGVzdDp0ZXN0',
    
'Content-Length:'.strlen($str_obj_json),
    
'Content-Type: application/x-www-form-urlencoded',
    
'Connection: Keep-Alive',
    
'Accept: */*');

$ch curl_init('http://10.10.237.8:21098/SMBULK/BATCH');
curl_setopt($chCURLOPT_POST1);
curl_setopt($chCURLOPT_POSTFIELDS$str_obj_json);
curl_setopt($chCURLOPT_RETURNTRANSFERTRUE);
curl_setopt($chCURLOPT_HTTPHEADER,$headers); 
curl_setopt($chCURLOPT_HEADER1);
$http_status curl_getinfo($chCURLINFO_HTTP_CODE);

$result curl_exec($ch);
curl_close($ch);
echo 
'<pre>';
echo 
$result;
echo 
'<pre>';
echo 
$http_status;
?>
Mi siguiente reto es enviar ya no solo un mensaje de texto (userdata) a tantos numeros, sino subir un archivo.txt formateado de la siguiente manera:

Código HTML:
50496814517,"Le deseamos una feliz navidad"
50495450021,"Le deseamos un feliz cumpleaños"
50499945002,"Le deseamos una estancia muy placentera en nuestro pais"
50495439954,"Le agradecemos su visita a nuestro pais"
__________________
Patrick:policia:

Etiquetas: post, request, https
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 22:02.