【问题标题】:Header section of PHP Curl returns errorPHP Curl 的标头部分返回错误
【发布时间】:2016-12-19 01:20:01
【问题描述】:

你好,很棒的 Stackoverflow,我正在通过 PHP Curl 测试我的 API。 API 需要将 Accept 变量和 Authorization 设置为标头。

<?php
$header = array(
 'Accept' => 'application/json',
  'Authorization' => 'ab167you89');
?>

当我运行下面的代码时,它会显示下面的错误。似乎无法通过 API URL CURL 访问标题部分中的 ACCEPT 和 AUTHORIZATION 变量。有人可以帮我解决这个问题。谢谢

下面是它显示的错误

{"errors":[{"status":"415","code":"015","title":"unsupported media type","detail":"Header 'Accept' must be set and must be one of: 'application/vnd.api+json', 'application/json', 'text/csv', 'application/xml'"},{"status":"400","code":"032","title":"requires project name in HTTP header Authorization","detail":"Provide the parameter 'Authorization' in HTTP header like 'your_project_name:your_token'."}]}

下面是完整代码

<?php


// 0 means unlimited timeout
ini_set('max_execution_time', 0);

$header = array(
 'Accept' => 'application/json',
  'Authorization' => 'ab167you89'

);

$url='https://myapicurl.com/info=100';
$ch = curl_init();

// Disable SSL verification
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);

curl_setopt($ch,CURLOPT_URL,$url);
curl_setopt($ch,CURLOPT_RETURNTRANSFER,true);
curl_setopt($ch,CURLOPT_HEADER, false); //if you want headers set it to true otherwise set it to false
curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
curl_setopt($ch, CURLOPT_POST, true);
//curl_setopt($ch, CURLOPT_POSTFIELDS,$postdata );    

//curl_setopt($ch, CURLOPT_POSTFIELDS,$fields_string);


$result=curl_exec($ch);
curl_close($ch);
echo '<pre>' . print_r($result, true) . '</pre>';

var_dump(json_decode($result, true));

?>

【问题讨论】:

    标签: php curl


    【解决方案1】:

    如 PHP 文档 (http://php.net/curl_setopt) 中所述:

    要设置的HTTP头字段数组,格式为array('Content-type: text/plain', 'Content-length: 100')

    CURLOPT_HTTPHEADER 选项接受以下格式的标头数组:

    array(
        'Header: value',
        'Header2: value'
    );
    

    您的解决方案存在错误,因为您使用的是 key => value 表示法。在您的情况下,$header 应该如下所示:

    <?php
    $header = array(
      'Accept: application/json',
      'Authorization: ab167you89'
    );
    

    【讨论】:

      【解决方案2】:
      <?php
      
          $url="your api url";
          $apiKey='XXXXX-xXXXXXXXXXXXX-xXXXXX';
          $Realm='XXXXXXXXXXXXX_xXXXXXXXXXXXXXXXXX';
          $ch = curl_init();  
      
          curl_setopt($ch,CURLOPT_URL,$url);
          curl_setopt($ch, CURLOPT_HTTPHEADER, array($apiKey,$Realm,
          'Accept: application/json',
          'Content-type: application/x-www-form-urlencoded'
          ));
          curl_setopt($ch,CURLOPT_RETURNTRANSFER,true);
          curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
          $output=curl_exec($ch);
      
          if($output === false)
          {
              echo "Error Number:".curl_errno($ch)."<br>";
              echo "Error String:".curl_error($ch);
          }
          curl_close($ch);
      
          $obj = json_decode($output, TRUE);
          ?>
      

      【讨论】:

        【解决方案3】:

        将您的 $header 值更改为:

        $header = array(
         'Accept:application/json',
          'Authorization:ab167you89'
        
        );
        

        【讨论】:

          猜你喜欢
          • 2019-04-07
          • 1970-01-01
          • 1970-01-01
          • 2015-03-23
          • 2014-07-19
          • 1970-01-01
          • 1970-01-01
          • 2018-07-14
          • 1970-01-01
          相关资源
          最近更新 更多