当前位置: 首页 > 知识库问答 >
问题:

GUZZL6 POST请求给出401个未经授权的响应

南门棋
2023-03-14
<?php
    //initialize test values.
    $results = [];
    $smpUrls = [];
    $client  = new Client();
    $authHeader = [
        'cookies' => true,
        'auth'    => [$this->username, $this->password],
        'json'    => [
            "alert" => 'test title',
            "data"  => 'test data sample'
        ],
        'debug' => true,
        'headers' => [
            'Content-Type'  => 'application/json',
            'Cache-Control' => 'no-cache',
            'X-SMP-DATA'    => 'testng'
        ],
    ];
    $technicianIds = ["123456"];


    //preparing urls
    foreach ($technicianIds as $technicianId) {
        $smpUrl = 'http://10.11.1.5:8080/restnotification/application/com.****.test/user/' . $technicianId;
        $smpUrls[$technicianId] = $smpUrl;

    }

    //generate function to deal with multiple requests.
    $requests = function ($urls, $headers) {
        foreach ($urls as $url) {
            yield new Request('POST', $url, $headers);
        }
    };

    /**
     * initialize guzzle pool in order to deal with individual request
     * response or exception
     */
    $pool = new Pool($client, $requests($smpUrls, $authHeader), [

        //process only four requests cuncurently.
        'concurrency' => 4,

        //deal with succesful request response.
        'fulfilled' => function ($response, $index) use (&$results) {
            //json decode output, collect name and append to result.
            \Log::info('fullfilled-response');
            \Log::info($response);
        },

        //deal with exception of individual request.
        'rejected' => function ($reason, $index) use (&$results) {
            \Log::info('rejected-reason');
            \Log::info($reason);
        }
    ]);

    // Initiate the transfers and create a promise
    $promise = $pool->promise();

    // Force the pool of requests to complete.
    $promise->wait();

    return $results;

请看下面生成的guzzle请求数据。

GuzzleHttp\Psr7\Request Object
(
    [method:GuzzleHttp\Psr7\Request:private] => POST
    [requestTarget:GuzzleHttp\Psr7\Request:private] => 
    [uri:GuzzleHttp\Psr7\Request:private] => GuzzleHttp\Psr7\Uri Object
        (
            [scheme:GuzzleHttp\Psr7\Uri:private] => http
            [userInfo:GuzzleHttp\Psr7\Uri:private] => 
            [host:GuzzleHttp\Psr7\Uri:private] => 10.11.1.5
            [port:GuzzleHttp\Psr7\Uri:private] => 8080
            [path:GuzzleHttp\Psr7\Uri:private] => /restnotification/application/com.*****.test/user/dileep
            [query:GuzzleHttp\Psr7\Uri:private] => 
            [fragment:GuzzleHttp\Psr7\Uri:private] => 
        )

    [headers:GuzzleHttp\Psr7\Request:private] => Array
        (
            [User-Agent] => Array
                (
                    [0] => GuzzleHttp/6.2.1 curl/7.50.1 PHP/7.0.10
                )

            [Host] => Array
                (
                    [0] => 10.11.1.5:8080
                )

            [cookies] => Array
                (
                    [0] => 1
                )

            [auth] => Array
                (
                    [0] => ******
                    [1] => ******
                )

            [json] => Array
                (
                    [alert] => Test Title
                    [data] => test details testing
                )

            [debug] => Array
                (
                    [0] => 1
                )

            [headers] => Array
                (
                    [Content-Type] => application/json
                    [Cache-Control] => no-cache
                    [X-SMP-DATA] => testng
                )

        )

    [headerNames:GuzzleHttp\Psr7\Request:private] => Array
        (
            [user-agent] => User-Agent
            [host] => Host
            [cookies] => cookies
            [auth] => auth
            [json] => json
            [debug] => debug
            [headers] => headers
        )

    [protocol:GuzzleHttp\Psr7\Request:private] => 1.1
    [stream:GuzzleHttp\Psr7\Request:private] => GuzzleHttp\Psr7\Stream Object
        (
            [stream:GuzzleHttp\Psr7\Stream:private] => Resource id #378
            [size:GuzzleHttp\Psr7\Stream:private] => 0
            [seekable:GuzzleHttp\Psr7\Stream:private] => 1
            [readable:GuzzleHttp\Psr7\Stream:private] => 1
            [writable:GuzzleHttp\Psr7\Stream:private] => 1
            [uri:GuzzleHttp\Psr7\Stream:private] => php://temp
            [customMetadata:GuzzleHttp\Psr7\Stream:private] => Array
                (
                )

        )

)

我在这里做错了什么?请分享你的想法。谢谢你。

共有1个答案

姬庆
2023-03-14

不幸的是,我无法解决这个错误。似乎promise方法在我的情况下不起作用。

所以我所做的是在一个循环上迭代guzzle post。Guzzle post在我的情况下没有任何问题。

下面给出了在我的例子中工作的示例代码:

<?php
//initialize test values.
$results = [];
$smpUrls = [];
$client  = new Client();
$authHeader = [
    'cookies' => true,
    'auth'    => [$this->username, $this->password],
    'json'    => [
        "alert" => 'test title',
        "data"  => 'test data sample'
    ],
    'debug' => true,
    'headers' => [
        'Content-Type'  => 'application/json',
        'Cache-Control' => 'no-cache',
        'X-SMP-DATA'    => 'testng'
    ],
];
$technicianIds = ["123456"];


//preparing urls
foreach ($technicianIds as $technicianId) {
    $smpUrl = 'http://10.11.1.5:8080/restnotification/application/com.****.test/user/' . $technicianId;
    $results[] = $client->post($smpUrl, $authHeader);

}
return $results;
 类似资料:
  • 我正在尝试登录基于cloudflare服务器的网站。我使用cloudserver绕过了登录问题,但我的下一个停止点是当我试图发送get请求以访问一些登录后令牌时。 我的代码: 这返回401作为答案: 它的标题是 好的,我首先试着给一个auth。这样地 我再次得到相同的错误,401,但这次响应的头确实有一个www身份验证,我应该质询 根据我所读到的内容,它是基本的意味着我必须在我的头文件中添加一个像

  • 我有一个在Azure网站上运行的标准Web API,启用了Azure AD身份验证,当在浏览器中浏览API时,我可以通过浏览器登录并获得对API的访问权。 但是,WPF桌面应用程序在提交请求时接收到未经授权的响应: 更新: 我已经在一个Azure帐户中重新创建了这个环境,我可以访问这个帐户,但仍然收到一个未经授权的响应(在浏览器中运行良好)。

  • 我想使用服务帐户实现谷歌表API请求。我创建了这个代码: 但是我得到了这个错误: com.google.api.client.auth.oauth2.TokenResponseException: 401 未经授权 在这个方法中 你知道我该如何解决这个问题吗?

  • 我的代码:GoogleCredential凭据 credential.refreshToken() 错误日志: 创建服务号的步骤: 我在凭据中的oauth 2.0中创建了一个Web应用程序 然后我用客户端ID创建了一个服务号 现在我正在使用这个服务号和从它生成的p12证书来验证和创建Google凭据的对象 一旦刷新令牌,我就给了我401例外。 在这种情况下,任何帮助都会受到感激

  • 我已经为此挠头两天了。我使用WebAPI版本2.2和我使用CORS。这个设置工作在服务器端,我被允许从我的web客户端服务器代码获得授权的内容,但在我的ajax调用中获得未经授权的内容。 以下是我的配置: Web API配置 WebApiConfig: Startup.Auth.cs: (我已经尝试了app.UseCors(CorsOptions.AllowAll)和config.EnableCo

  • 我在谷歌日历API工作。 问题是当使用刷新令牌时,我得到的是“请求失败:未授权(401)”(刷新令牌是因为用户不应该每次都需要登录) 对于在用户首次授权应用程序后检索的正常访问令牌(未过期),它可以正常工作。 下面是运行时url,它只在不使用刷新的访问令牌之前工作。