【问题标题】:Can I call curl_setopt with CURLOPT_HTTPHEADER multiple times to set multiple headers?我可以多次使用 CURLOPT_HTTPHEADER 调用 curl_setopt 来设置多个标头吗?
【发布时间】:2013-02-14 14:05:40
【问题描述】:

我可以多次调用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);

【问题讨论】:

  • 当你只能执行一次并获得相同的结果时,为什么还要多次调用一个函数?您只是在提供更多开销,并且您可能会在整个地方都使用标头声明来混淆代码。
  • 有条件地设置一些参数或者在过程中创建默认 curl 句柄并稍后添加特定标头可能很有用。

标签: php curl


【解决方案1】:

按照 curl 在内部对请求所做的操作(通过this answer to "Php - Debugging Curl" 中概述的方法)回答了这个问题:

不,不能将curl_setopt 调用与CURLOPT_HTTPHEADER 一起使用多次,每次都传递一个标头,以便设置多个标头。

第二次调用将覆盖前一次调用(例如第一次调用)的标题。

相反,该函数需要使用所有标头调用一次:

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

相关(但不同)的问题是:

【讨论】:

    【解决方案2】:

    其他类型的格式:

    $headers[] = 'Accept: application/json';
    $headers[] = 'Content-Type: application/json';
    $headers[] = 'Content-length: 0';
    
    curl_setopt($curlHandle, CURLOPT_HTTPHEADER, $headers);
    

    【讨论】:

      【解决方案3】:
      /**
       * 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'
       * ];
       */
      $header; //**
      if (is_array($header)) {
          $i_header = $header;
          $header = [];
          foreach ($i_header as $param => $value) {
              $header[] = "$param: $value";
          }
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-01-09
        • 2021-04-20
        • 1970-01-01
        • 1970-01-01
        • 2016-02-12
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多