【问题标题】:PHP Guzzle with basic auth and bearer token带有基本身份验证和不记名令牌的 PHP Guzzle
【发布时间】:2016-10-28 00:27:40
【问题描述】:

我正在尝试与 infojobs-api 建立连接,文档说明了如何以这种方式建立连接:

GET /api/1/application HTTP/1.1
主办方:api.infojobs.net 授权:基本QWxhZGRpbjpvcGVuIHNlc2FtZQ==,Bearer 07d18fac-77ea-461f-9bfe-a5e9d98deb3d

(https://developer.infojobs.net/documentation/user-oauth2/index.xhtml)

这是我的代码:

$basicauth = new Client(['base_uri' => 'https://api.infojobs.net']);

$credentials = base64_encode(CLIENT_ID .':' . CLIENT_SECRET ) ;

$newresponse = $basicauth->request(
  'GET',
  'api/1/curriculum',
  ['debug' => true], 
  ['auth' => 
    ['Basic', $credentials] ,
    ['Bearer', $acceso->access_token]
  ]
)->getBody()->getContents();

d($newresponse);

API/Guzlle 将这个错误返回给我:

致命错误:未捕获的 GuzzleHttp\Exception\ClientException:客户端错误:GET https://api.infojobs.net/api/1/curriculum 导致 401 No Autorizado 响应: {"error":"102","error_description":"客户端凭据无效","timestamp":"2016-06-25T14:08:54.774Z"} 在 /app/vendor/guzzlehttp/guzzle/src/Exception/RequestException.php:107

所以我做错了什么,但我没有找到问题所在。

任何想法,谢谢。

奥斯卡

【问题讨论】:

    标签: php guzzle6


    【解决方案1】:

    对于我来说,这对我有用:

    $guzzle = new Client(['base_uri' => self::APIURL]);
    
    $raw_response = $guzzle->post($endpoint, [
      'headers' => [ 'Authorization' => 'Bearer ' . $publicKey ],
      'body' => json_encode($data),
    ]);
    
    $response = $raw_response->getBody()->getContents();
    

    【讨论】:

      【解决方案2】:

      当我看到您的请求的 HTTP 标头时:

      Authorization: Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==,Bearer 07d18fac-77ea-461f-9bfe-a5e9d98deb3d
      

      您有一个 Authorization 标头,其中包含一个逗号分隔值。他们彼此并不分离。所以你不能像你所做的那样从 Guzzle 的auth 密钥中受益。

      您应该手动设置授权标头:

      $newresponse = $basicauth->request(
          'GET',
          'api/1/curriculum',
          ['debug'   => true], 
          ['headers' => 
              [
                  'Authorization' => "Basic {$credentials},Bearer {$acceso->access_token}"
              ]
          ]
      )->getBody()->getContents();
      

      【讨论】:

      • 在我的情况下,我只需要添加 Authorization => Bearer {$token} 并且还必须将 debug 更改为 false,因为我遇到了 Guzzle 错误。但最终它奏效了:)
      猜你喜欢
      • 1970-01-01
      • 2016-11-16
      • 2021-01-25
      • 2016-01-29
      • 2011-03-18
      • 1970-01-01
      • 2018-05-19
      • 1970-01-01
      • 2012-03-19
      相关资源
      最近更新 更多