Kann ich curl_setopt mit CURLOPT_HTTPHEADER mehrmals aufrufen, um mehrere Header festzulegen?

79

Kann ich rufe curl_setoptmit CURLOPT_HTTPHEADERmehrfach mehrere Header zu setzen?

$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
quelle
Warum sollten Sie eine Funktion mehrmals aufrufen, wenn Sie dies nur einmal tun und das gleiche Ergebnis erzielen können? Sie geben nur mehr Overhead und können den Code mit Header-Deklarationen überall verschmutzen.
Tudor
1
Es kann nützlich sein, einige Parameter bedingt festzulegen oder wenn Sie in einer Prozedur ein Standard-Curl-Handle erstellen und später bestimmte Header hinzufügen.
Florian F

Antworten:

116

Wenn Sie wissen, was Curl intern für die Anforderung tut (über die in dieser Antwort auf "Php - Debugging Curl" beschriebene Methode ), wird die Frage beantwortet: Nein, es ist nicht möglich, den curl_setoptAufruf mit zu verwenden CURLOPT_HTTPHEADER. Der zweite Aufruf überschreibt die Header des ersten Aufrufs.

Stattdessen muss die Funktion mit allen Headern einmal aufgerufen werden:

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

Verwandte (aber unterschiedliche) Fragen sind:

hakre
quelle
11

Andere Art von Format:

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

curl_setopt($curlHandle, CURLOPT_HTTPHEADER, $headers);
Pascual Muñoz
quelle
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
quelle