curlopt_put curlopt_get php curl libcurl

php - curlopt_put - curlopt_get



CURLOPT_POST vs. CURLOPT_POSTFIELDS: ¿Se requiere la opción CURLOPT_POST? (2)

Soy nuevo en CURL en PHP. Tengo una pregunta sobre el uso de las opciones de rizo.

Considere dos archivos de script: test1.php y test2.php ambos presentes en la raíz www. Estoy usando Ubuntu 12.04 LTS . La versión libcurl para PHP es 7.22.0 .

Contenido de test1.php

<?php $ch = curl_init(); $post_data = array( ''firstname'' => ''John'', ''lastname'' => ''Doe'' ); curl_setopt($ch, CURLOPT_URL, ''localhost/test2.php''); curl_setopt($ch, CURLOPT_POST, TRUE); //is it optional? curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data); curl_exec($ch); curl_close($ch); ?>

Contenido de test2.php

<?php var_dump($_POST); ?>

Cuando ejecuto test1.php a través del navegador, puedo ver los resultados publicados. Ahora, si elimino la opción de rizo que contiene CURLOPT_POST , el ejemplo todavía funciona. Incluso si configuro CURLOPT_POST en falso, la publicación se realiza y el resultado se muestra. Entonces, ¿ese CURLOPT_POST no se requiere en absoluto? Parece que la opción CURLOPT_POSTFIELDS se encarga de enviar los datos a través de POST sin utilizar la opción CURLOPT_POST . Cuando imprimo $_SERVER en test2.php, el método de solicitud siempre se establece en POST (con o sin la opción CURLOPT_POST ).

¿Podría alguien, por favor, decirme el uso exacto de la opción CURLOPT_POST ? ¿Es necesario para enviar datos a través de POST ?


Estás en lo correcto. CURLOPT_POSTFIELDS implica CURLOPT_POST . No es necesario utilizar CURLOPT_POST mientras se usa CURLOPT_POSTFIELDS . El método de solicitud siempre se establecerá en POST en este caso.

Tenga en cuenta que esto es en su caso siempre que desee que sea una solicitud POST .

Si no desea que sea una solicitud POST, pero configure CURLOPT_POSTFIELDS , consulte estas preguntas y respuestas relacionadas:

  • Cómo cambiar de POST a GET en PHP CURL

Para futuras referencias, el documento de API dice esto sobre CURLOPT_POST

Resumen:

Un parámetro verdadero le dice a la biblioteca que haga una publicación HTTP regular. Esto también hará que la biblioteca use el encabezado "Content-Type: application / x-www-form-urlencoded". (Este es, con mucho, el método POST más utilizado).

Use la opción CURLOPT_POSTFIELDS para especificar qué datos publicar y CURLOPT_POSTFIELDSIZE para establecer el tamaño de los datos. Opcionalmente, puede proporcionar datos a POST utilizando las opciones CURLOPT_READFUNCTION y CURLOPT_READDATA.

Puede anular el encabezado POST Content-Type predeterminado: configurando el suyo propio con CURLOPT_HTTPHEADER.

El uso de POST con HTTP 1.1 implica el uso de un encabezado "Expect: 100-continue". Puede deshabilitar este encabezado con CURLOPT_HTTPHEADER como de costumbre.

Si usa POST en un servidor HTTP 1.1, puede enviar datos sin saber el tamaño antes de iniciar la POST si usa codificación fragmentada. Para habilitar esto, agregue un encabezado como "Transfer-Encoding: chunked" con CURLOPT_HTTPHEADER. Con HTTP 1.0 o sin transferencia fragmentada, debe especificar el tamaño en la solicitud.

Si ha emitido una solicitud POST y desea hacer un HEAD o GET en su lugar, debe elegir explícitamente el nuevo tipo de solicitud utilizando CURLOPT_NOBODY o CURLOPT_HTTPGET o similar.

Estoy probando ahora si la configuración de CURLOPT_POST para intentar anulará mi configuración CURLOPT_HTTPHEADER, "Content-Type: application / json; charset = utf-8".