online example ejemplo codificar http post http-post urlencode url-encoding

http - example - url encode php



¿Debería codificar URL los datos POST? (3)

Estoy PUBLICANDO datos a una API externa (usando PHP, si es relevante).

¿Debería codificar URL las variables POST que paso?

¿O solo necesito codificar URL los 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);


Respuesta general

La respuesta general a tu 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 necesitará ser URL codificada igual que una cadena de parámetros GET. Un valor de "multipart / form-data" significa que usará delimitadores de contenido y NO URL que codifiquen el contenido.

Esta respuesta tiene una explicación mucho más completa si desea obtener más información.

Respuesta específica

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:

CURLOPT_POST

CIERTO hacer un POST HTTP regular. Este POST es el tipo de aplicación normal / x-www-form-urlencoded, más comúnmente utilizado por los formularios HTML.

CURLOPT_POSTFIELDS

La información completa para publicar en una operación HTTP "POST". Para publicar un archivo, anteponga un nombre de archivo con @ y use la ruta completa. El tipo de archivo se puede especificar explícitamente siguiendo el nombre del archivo con el tipo en el formato ''; type = mimetype''. Este parámetro se puede pasar como una cadena urlencoded como ''para1 = val1 & para2 = val2 & ...'' o como una matriz con el nombre del campo como clave y datos de campo como valor. Si value es una matriz, el encabezado Content-Type se establecerá en multipart / form-data. A partir de PHP 5.2.0, el valor debe ser una matriz si los archivos se pasan a esta opción con el prefijo @.


@DougW ha respondido claramente esta pregunta, pero todavía me gustaría agregar algunos códigos aquí para explicar los puntos de Doug. (Y corregir errores en el código anterior)

Solución 1: codificación URL de los datos POST con un encabezado de tipo de contenido: application / x-www-form-urlencoded.

Nota: no necesita urlencode $ _POST [] campos uno por uno, la función http_build_query () puede hacer el trabajo de urlencoding muy bien.

$fields = array( ''mediaupload''=>$file_field, ''username''=>$_POST["username"], ''password''=>$_POST["password"], ''latitude''=>$_POST["latitude"], ''longitude''=>$_POST["longitude"], ''datetime''=>$_POST["datetime"], ''category''=>$_POST["category"], ''metacategory''=>$_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,1); curl_setopt($ch, CURLOPT_POSTFIELDS,$fields_string); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); $response = curl_exec($ch);

Solución 2: Pase la matriz directamente como los datos de la publicación sin codificación URL, mientras que la cabecera Content-Type se configurará en multipart / form-data.

$fields = array( ''mediaupload''=>$file_field, ''username''=>$_POST["username"], ''password''=>$_POST["password"], ''latitude''=>$_POST["latitude"], ''longitude''=>$_POST["longitude"], ''datetime''=>$_POST["datetime"], ''category''=>$_POST["category"], ''metacategory''=>$_POST["metacategory"], ''caption''=>$_POST["description"] ); $ch = curl_init(); curl_setopt($ch, CURLOPT_URL,$url); curl_setopt($ch, CURLOPT_POST,1); curl_setopt($ch, CURLOPT_POSTFIELDS,$fields); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); $response = curl_exec($ch);

Ambos fragmentos de código funcionan, pero usan diferentes encabezados y cuerpos HTTP.


curl codificará los datos por usted, solo deje caer sus datos de campo sin procesar en la matriz de campos y dígale que "vaya".