适用于PATCH方法的OAuth 1.0单腿客户端“ HTTP 401未经授权的错误”

BentCoder

这是我第一次使用OAuth,并且创建了下面的部分起作用的类!我遵循了本手册

方法methodGet()methodPost()工作正常,但是methodPatch()返回“ HTTP 401未经授权的错误”。点完需要一个PATCH请求方法和因为没有固定PATCHOAuth的类,我试图发送一个POST请求,并试图用额外的覆盖它X-Http-Method-Override,这样头就变成一个PATCH幕后的方法(可能是不! !)。那是问题,我无法修补!

由于它很可能与PATCH(GET和POST正常工作)有关,有人知道它的解决方案吗,或者我是否还缺少其他东西?

注意:我可以确认端点工作正常,因此该端没有问题。

提前致谢

use Exception;
use OAuth;
use OAuthException;

class ApiClient
{
    // End-point accepts GET request - This works fine
    public function methodGet()
    {
        return $this->call(
            OAUTH_HTTP_METHOD_GET,
            array('id' => 123)
        );
    }

    // End-point accepts POST request - This works fine
    public function methodPost()
    {
        return $this->call(
            OAUTH_HTTP_METHOD_POST,
            array('name' => 'inanzzz')
        );
    }

    // End-point accepts PATCH request - This returns HTTP 401 Unauthorized
    public function methodPatch()
    {
        return $this->call(
            OAUTH_HTTP_METHOD_POST,
            array('id' => 123, 'name' => 'inanzzz123'),
            ['X-Http-Method-Override' => 'PATCH']
        );
    }

    private function call($method, $params = array(), $headers = array())
    {
        try {
            $oAuth = new OAuth('api_key_goes_here', 'api_secret_goes_here');
            $oAuth->setNonce(md5(uniqid(mt_rand(), true)));
            $oAuth->setTimestamp(time());
            $oAuth->setVersion('1.0');
            $oAuth->fetch(
               'http://api.domain.com/1/products/service.json',
               $params, $method, $headers
            );

            return json_decode($oAuth->getLastResponse(), true);
        } catch (OAuthException $e) {
            throw new Exception($e->getMessage(), $e->getCode());
        }
    }
}
BentCoder

解决方案是使用Guzzle Client,因此方法如下:

注意:$authHeader保留,$oauth->getRequestHeader(...);因此您可以生成它并将其传递给方法。

private function call($uri, $method, $authHeader, array $payload = [])
{
    try {
        $client = new Client();
        $request = $client->createRequest($method, $uri);
        $request->addHeader('Authorization', $authHeader);
        $request->addHeader('Content-Type', 'application/json');
        $request->setBody(Stream::factory(json_encode($payload)));
        $response = $client->send($request);
    } catch (RequestException $e) {
        $message = $e->hasResponse()
            ? $e->getResponse()
            : 'An unknown error occurred while trying to process your request.';

        throw new Exception($message);
    }

    return json_decode($response->getBody(), true);
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

Python Linkedin API OAuth2 HTTP错误401:未经授权

Solr HTTP错误:未经授权(401)

401(未经授权)获取方法错误

离子 HTTP 客户端发布请求跨源错误,但适用于 Postman

OAuth1 reject_token 401未经授权

OAuth 401未经授权

HTTP错误401:未经授权使用urllib.request.urlopen

Spring Boot测试中发生HTTP 401未经授权的错误

HTTPError:HTTP错误401:未经授权与python进行sendgrid集成

Django Rest Framework:HTTP 401未经授权的错误

curl请求上的HTTP / 1.1 401未经授权错误-heroku

未经授权 (HTTP 401) Romdbapi

工作日OAuth-错误未经授权的客户端

Google PHP Api客户端-我不断收到错误401:未经授权

Kubernetes客户端python API错误401-未经授权

从 AngularJS/ADAL.js 客户端访问 WebApI 时出现 401 未经授权的错误

适用于Twitter API的Python Tweepy返回“错误401:未经授权”

C#asp.net核心HTTP POST请求适用于邮递员,但不适用于我的Angular客户端(404错误)

Get方法后Symfony + AngularJS 401未经授权的错误

未经授权的客户端:未经授权的客户端可以使用此方法检索访问令牌

尝试从backpack.tf 获取OAuth 授权时如何修复“错误:(401) 未经授权”?

在结构2上执行st2命令时,出现“ 401客户端错误:未经授权”

NET核心api的Prometheus返回错误“服务器返回HTTP状态401未经授权”

在NiFi中从Java SDK调用时,Splunk抛出HTTP 401未经授权的错误

使用python查询youtube api的播放列表时出现“ HTTP错误401:未经授权”

ADFS - HTTP 请求未经客户端身份验证方案“协商”授权

Apache http客户端默认设置不适用于sni

Dio(Dart的HTTP客户端)获取请求不适用于拦截器

请求中的重定向 URI http://localhost:8080/ 与 OAuth 客户端授权的不匹配