Чи можу я зателефонувати curl_setopt за допомогою CURLOPT_HTTPHEADER кілька разів, щоб встановити кілька заголовків?


79

Можу чи я зателефонувати curl_setoptз CURLOPT_HTTPHEADERкілька разів , щоб встановити кілька заголовків?

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

Чому б вам викликати функцію кілька разів, коли ви можете зробити це лише один раз і отримати однаковий результат? Ви просто даєте більше накладних витрат, і ви можете забруднити код деклараціями заголовків всюди.
Тудор

1
Це може бути корисним для встановлення деяких параметрів умовно, або якщо ви створюєте дескриптор завивки за замовчуванням у процедурі та додаєте конкретні заголовки пізніше.
Флоріан Ф,

Відповіді:


118

Слідом за тим, що curl робить внутрішньо для запиту (за допомогою методу, викладеного у цій відповіді до "Php - Налагодження Curl" ), відповідає на запитання: Ні, не можна використовувати curl_setoptвиклик CURLOPT_HTTPHEADER. Другий виклик замінить заголовки першого дзвінка.

Натомість функцію потрібно викликати один раз із усіма заголовками:

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

Пов’язані (але різні) запитання:


11

Інший тип формату:

$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";
    }
}
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.