Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] Enviar signo + por POST en CURL

Estas en el tema de Enviar signo + por POST en CURL en el foro de PHP en Foros del Web. Buenas, Cómo hay que enviar el signo + por POST a través de CURL. Llegan espacios en banco en su lugar. He probado con urlencode, ...
  #1 (permalink)  
Antiguo 28/02/2013, 02:40
Avatar de cluster28  
Fecha de Ingreso: enero-2008
Ubicación: Donostia - San Sebastián
Mensajes: 756
Antigüedad: 16 años, 11 meses
Puntos: 32
Enviar signo + por POST en CURL

Buenas,

Cómo hay que enviar el signo + por POST a través de CURL. Llegan espacios en banco en su lugar.

He probado con urlencode, y sustituyéndolo por %2B pero no esas no son las soluciones.

Gracias.
  #2 (permalink)  
Antiguo 28/02/2013, 03:38
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 9 meses
Puntos: 574
Respuesta: Enviar signo + por POST en CURL

Muestra como lo haces... esta dentro de una cadena?
__________________
Quim
--------------------------------------------------
Ayudar a ayudar es una buena práctica!!! Y da buenos resultados.
  #3 (permalink)  
Antiguo 28/02/2013, 03:43
Avatar de cluster28  
Fecha de Ingreso: enero-2008
Ubicación: Donostia - San Sebastián
Mensajes: 756
Antigüedad: 16 años, 11 meses
Puntos: 32
Respuesta: Enviar signo + por POST en CURL

Cita:
Iniciado por quimfv Ver Mensaje
Muestra como lo haces... esta dentro de una cadena?
Código PHP:
$ch curl_init();
curl_setopt($chCURLOPT_SSLVERSION3);
curl_setopt($chCURLOPT_SSL_VERIFYPEERFALSE);
curl_setopt($chCURLOPT_SSL_VERIFYHOST2);
curl_setopt($chCURLOPT_RETURNTRANSFERTRUE);
curl_setopt($chCURLOPT_POSTTRUE);
curl_setopt($chCURLOPT_POSTFIELDS"campo=loquesea+");
curl_setopt($chCURLOPT_URL"https://ejemplo.com/ws");
$resultado curl_exec($ch); 
  #4 (permalink)  
Antiguo 28/02/2013, 06:00
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 9 meses
Puntos: 574
Respuesta: Enviar signo + por POST en CURL

La sintaxis es "+" no es "&"?... podrias usar "&" y substituirla una vez llegan...

campo=loquesea+campo2=loquesea...

campo=loquesea&campo2=loquesea...

O forma parte del valor del campo?
__________________
Quim
--------------------------------------------------
Ayudar a ayudar es una buena práctica!!! Y da buenos resultados.
  #5 (permalink)  
Antiguo 28/02/2013, 06:04
Avatar de cluster28  
Fecha de Ingreso: enero-2008
Ubicación: Donostia - San Sebastián
Mensajes: 756
Antigüedad: 16 años, 11 meses
Puntos: 32
Respuesta: Enviar signo + por POST en CURL

No no, los datos se concatenan con & y el + forma parte del valor del campo.

De todos modos he seguido haciendo pruebas y los responsables del servidor al que realizo las consultas me dicen que tengo que sustuirlo por %2B, pero ya les he dicho que parece que no funciona bien con ellos y estoy esperando respuesta.

He probado a enviarles los datos como "multipart/form-data" pero no lo aceptan, hay que enviarles si o si como " application/x-www-form-urlencoded"
  #6 (permalink)  
Antiguo 28/02/2013, 06:09
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 9 meses
Puntos: 574
Respuesta: Enviar signo + por POST en CURL

curl_setopt($ch, CURLOPT_POSTFIELDS, urlencode("campo=loquesea+"));

y esto no va....

o

$var=urlencode("campo=loquesea+");
curl_setopt($ch, CURLOPT_POSTFIELDS, $var);
__________________
Quim
--------------------------------------------------
Ayudar a ayudar es una buena práctica!!! Y da buenos resultados.
  #7 (permalink)  
Antiguo 28/02/2013, 06:13
Avatar de masterpuppet
Software Craftsman
 
Fecha de Ingreso: enero-2008
Ubicación: Montevideo, Uruguay
Mensajes: 3.550
Antigüedad: 16 años, 11 meses
Puntos: 845
Respuesta: Enviar signo + por POST en CURL

Porque no le pasas un array directamente y dejas que curl se encargue del encoding ?

Código PHP:
Ver original
  1. curl_setopt($ch, CURLOPT_POSTFIELDS, array('campo' => 'loquesea+'));
__________________
http://es.phptherightway.com/
thats us riders :)
  #8 (permalink)  
Antiguo 28/02/2013, 06:13
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 9 meses
Puntos: 574
Respuesta: Enviar signo + por POST en CURL

Un post del manual de php

Cita:
urlencode function and rawurlencode are mostly based on RFC 1738.

However, since 2005 the current RFC in use for URIs standard is RFC 3986.

Here is a function to encode URLs according to RFC 3986.

<?php
function myUrlEncode($string) {
$entities = array('%21', '%2A', '%27', '%28', '%29', '%3B', '%3A', '%40', '%26', '%3D', '%2B', '%24', '%2C', '%2F', '%3F', '%25', '%23', '%5B', '%5D');
$replacements = array('!', '*', "'", "(", ")", ";", ":", "@", "&", "=", "+", "$", ",", "/", "?", "%", "#", "[", "]");
return str_replace($entities, $replacements, urlencode($string));
}
?>
__________________
Quim
--------------------------------------------------
Ayudar a ayudar es una buena práctica!!! Y da buenos resultados.
  #9 (permalink)  
Antiguo 28/02/2013, 06:14
Avatar de cluster28  
Fecha de Ingreso: enero-2008
Ubicación: Donostia - San Sebastián
Mensajes: 756
Antigüedad: 16 años, 11 meses
Puntos: 32
Respuesta: Enviar signo + por POST en CURL

Me acanban de decir que envíe %2B en lugar de +, que es lo que hace urlencode. Por lo visto el campo dónde probaba probaba esto mismo no admitía el + por eso fallaba. Mala documentación la que tienen.

Gracias.
  #10 (permalink)  
Antiguo 28/02/2013, 06:26
Avatar de cluster28  
Fecha de Ingreso: enero-2008
Ubicación: Donostia - San Sebastián
Mensajes: 756
Antigüedad: 16 años, 11 meses
Puntos: 32
Respuesta: Enviar signo + por POST en CURL

Cita:
Iniciado por masterpuppet Ver Mensaje
Porque no le pasas un array directamente y dejas que curl se encargue del encoding ?

Código PHP:
Ver original
  1. curl_setopt($ch, CURLOPT_POSTFIELDS, array('campo' => 'loquesea+'));
Pasándolo así el servidor me respondía con un código 500 y "An unexpected error has occurred"

Etiquetas: curl, post, signo
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 11:39.