¿Puedo llamar a curl_setopt con CURLOPT_HTTPHEADER varias veces para configurar varios encabezados?

79

¿Puedo llamar curl_setopta CURLOPT_HTTPHEADERvarias veces para definir múltiples cabeceras?

$url = 'http://www.example.com/';

$curlHandle = curl_init($url);
curl_setopt($curlHandle, CURLOPT_HTTPHEADER, array('Content-type: application/xml'));
curl_setopt($curlHandle, CURLOPT_HTTPHEADER, array('Authorization: gfhjui'));

$execResult = curl_exec($curlHandle);
hakre
fuente
¿Por qué llamarías a una función varias veces cuando puedes hacer esto solo una vez y obtener el mismo resultado? Solo está dando más gastos generales y puede enturbiar el código con declaraciones de encabezado por todas partes.
Tudor
1
Podría ser útil establecer algunos parámetros de forma condicional o si crea un identificador de rizo predeterminado en un procedimiento y agrega encabezados específicos más adelante.
Florian F

Respuestas:

118

Siguiendo lo que curl hace internamente para la solicitud (a través del método descrito en esta respuesta a "Php - Debugging Curl" ) responde la pregunta: No, no es posible usar la curl_setoptllamada con CURLOPT_HTTPHEADER. La segunda llamada sobrescribirá los encabezados de la primera llamada.

En cambio, la función debe llamarse una vez con todos los encabezados:

$headers = array(
    'Content-type: application/xml',
    'Authorization: gfhjui',
);
curl_setopt($curlHandle, CURLOPT_HTTPHEADER, $headers);

Las preguntas relacionadas (pero diferentes) son:

hakre
fuente
11

Otro tipo de formato:

$headers[] = 'Accept: application/json';
$headers[] = 'Content-Type: application/json';
$headers[] = 'Content-length: 0';

curl_setopt($curlHandle, CURLOPT_HTTPHEADER, $headers);
Pascual Muñoz
fuente
0
/**
 * If $header is an array of headers
 * It will format and return the correct $header
 * $header = [
 *  'Accept' => 'application/json',
 *  'Content-Type' => 'application/x-www-form-urlencoded'
 * ];
 */
$i_header = $header;
if(is_array($i_header) === true){
    $header = [];
    foreach ($i_header as $param => $value) {
        $header[] = "$param: $value";
    }
}
Tesla
fuente