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);

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:


11

Andere Art von Format:

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

curl_setopt($curlHandle, CURLOPT_HTTPHEADER, $headers);

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";
    }
}
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.