CURLOPT_HTTPHEADER로 curl_setopt를 여러 번 호출하여 여러 헤더를 설정할 수 있습니까?


79

내가 전화를 할 수 curl_setoptCURLOPT_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);

한 번만 수행 할 수 있고 동일한 결과를 얻을 수 있는데 왜 함수를 여러 번 호출합니까? 당신은 더 많은 오버 헤드를 제공하고 있으며 헤더 선언으로 코드를 뒤죽박죽으로 만들 수 있습니다.
Tudor

1
일부 매개 변수를 조건부로 설정하거나 프로 시저에서 기본 컬 핸들을 만들고 나중에 특정 헤더를 추가하는 경우 유용 할 수 있습니다.
Florian F

답변:


118

컬이 (에 설명 된 방법을 통해 요청에 대해 내부적으로 무엇을하는지에 따라 이 답 "PHP - 디버깅 컬은" ) 질문에 대한 답 : 아니오, 사용할 수 없습니다 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";
    }
}
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.