Estoy PUBLICANDO datos en una API externa (usando PHP, si es relevante).
¿Debo codificar en URL las variables POST que paso?
¿O solo necesito codificar URL para obtener datos GET?
¡Gracias!
ACTUALIZACIÓN: Este es mi PHP, en caso de que sea relevante:
$fields = array(
'mediaupload'=>$file_field,
'username'=>urlencode($_POST["username"]),
'password'=>urlencode($_POST["password"]),
'latitude'=>urlencode($_POST["latitude"]),
'longitude'=>urlencode($_POST["longitude"]),
'datetime'=>urlencode($_POST["datetime"]),
'category'=>urlencode($_POST["category"]),
'metacategory'=>urlencode($_POST["metacategory"]),
'caption'=>($_POST["description"])
);
$fields_string = http_build_query($fields);
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,$url);
curl_setopt($ch,CURLOPT_POST,count($fields));
curl_setopt($ch,CURLOPT_POSTFIELDS,$fields);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$response = curl_exec($ch);
Respuestas:
Respuesta general
La respuesta general a su pregunta es que depende. Y puede decidir especificando cuál es su "Tipo de contenido" en los encabezados HTTP.
Un valor de "application / x-www-form-urlencoded" significa que su cuerpo POST deberá estar codificado en URL como una cadena de parámetro GET. Un valor de "multipart / form-data" significa que usará delimitadores de contenido y NO codificará el contenido.
Esta respuesta tiene una explicación mucho más exhaustiva si desea obtener más información.
Respuesta especifica
Para obtener una respuesta específica a las bibliotecas PHP que está utilizando (CURL), debe leer la documentación aquí .
Aquí está la información relevante:
fuente
@DougW ha respondido claramente esta pregunta, pero todavía me gusta agregar algunos códigos aquí para explicar los puntos de Doug. (Y corrija los errores en el código anterior)
Solución 1: codifique con URL los datos POST con un encabezado de tipo de contenido: application / x-www-form-urlencoded.
Nota: no necesita codificar urlen $ _POST [] campos uno por uno, la función http_build_query () puede hacer bien el trabajo de codificación urlen.
Solución 2: Pase la matriz directamente como datos de publicación sin codificación de URL, mientras que el encabezado Content-Type se establecerá en multipart / form-data.
Ambos fragmentos de código funcionan, pero con diferentes encabezados y cuerpos HTTP.
fuente
curl codificará los datos por usted, simplemente suelte los datos de campo sin procesar en la matriz de campos y dígale que "vaya".
fuente
Las publicaciones anteriores responden preguntas relacionadas con la codificación de URL y cómo funciona, pero las preguntas originales eran "¿Debo codificar los datos POST de la URL?" que no se responde
Desde mi experiencia reciente con la codificación de URL, me gustaría ampliar aún más la pregunta. "Debo codificar los datos POST de la URL, igual que el método GET HTTP. En general, los formularios HTML sobre el navegador si se rellenan, envían y / o OBTENEN alguna información, los navegadores harán la codificación de URL pero si una aplicación expone un servicio web y espera Los consumidores deben realizar la codificación de URL en los datos, ¿es correcto arquitectónicamente y técnicamente hacer la codificación de URL con el método POST HTTP? "
fuente