CURLOPT de CURL en PHP
Normalmente, cuando usamos CURL para enviar datos POST, estamos acostumbrados a escribir así:
El código es el siguiente: curl_setopt ($ch, curl_post field, $post _ data);
Sin embargo, esta forma de escribir a veces no es fácil de usar y el servidor puede devolver un error 500. Pero cuando intentamos enviar datos al servidor a través de Socket, obtenemos resultados muy correctos.
Por ejemplo, tenemos el siguiente archivo PHP en el servidor:
El código es el siguiente:
Cuando usamos CURL para enviar algunos datos al servidor sin prestar atención a los detalles, podemos obtener el siguiente resultado, que no es nuestro resultado ideal:
Copie el código de la siguiente manera: [content_type]= multipart/form-data =——— —————-f 924413ea 122
Pero si usamos http_build_query($post_data) en lugar de $post_data, y luego enviamos los datos a este script PHP, obtendremos resultados diferentes a los anteriores, que es nuestro resultado ideal:
El código es el siguiente: [content_type]= application/x-www-form-urlencoded.
No es difícil ver en el ejemplo anterior que cuando se usa CURL y el parámetro son datos, al enviar datos al servidor, el encabezado HTTP enviará content_type: application/x-www-form-URL codificado. Esta es una página web normal.
El título enviado por el navegador al enviar el formulario. Sabemos que este es un formulario para cargar archivos. Incluyendo los delimitadores de límites, habrá más bytes.
El manual oficial dice:
El código es el siguiente: los datos completos se publicarán en la operación "post" http. Para publicar un archivo, anteponga el nombre del archivo con @ y utilice la ruta completa. Esto se puede pasar como una cadena codificada en URL, como "para1=val12=val2", o como una matriz con nombres de campos como claves y datos de campo como valores. Si el valor es una matriz, el encabezado Content-Type se establecerá en multipart/form-data.
Cuando se utiliza una matriz para proporcionar datos de publicación, el componente CURL puede establecer content_type en multipart/form-data de forma predeterminada para que sea compatible con @filename. Si bien no afecta a la mayoría de los servidores, hay algunos que son incompatibles.
Después de un resumen, finalmente llegamos a la conclusión de que si no es necesario cargar archivos, intente usar http_build_query para procesar los datos enviados por la publicación y luego enviarlos para lograr una mejor compatibilidad y paquetes de solicitud más pequeños.