簡體   English   中英

Guzzle6 / PSR7中的POST請求中的空主體

[英]Empty Body on POST Request in Guzzle6/PSR7

我在PSR7風格中使用Guzzle6,因為它與Hawk身份驗證很好地集成在一起。 現在,我遇到了在請求中添加主體的問題。

private function makeApiRequest(Instructor $instructor): ResponseInterface
{
    $startDate = (new CarbonImmutable('00:00:00'))->toIso8601ZuluString();
    $endDate = (new CarbonImmutable('00:00:00'))->addMonths(6)->toIso8601ZuluString();
    $instructorEmail = $instructor->getEmail();
    $body = [
        'skip' => 0,
        'limit' => 0,
        'filter' => [
            'assignedTo:user._id' => ['email' => $instructorEmail],
            'start' => ['$gte' => $startDate],
            'end' => ['$lte' => $endDate],
        ],
        'relations' => ['reasonId']
    ];

    $request = $this->messageFactory->createRequest(
        'POST',
        'https://app.absence.io/api/v2/absences',
        [
            'content_type' => 'application/json'
        ],
        json_encode($body)
    );

    $authentication = new HawkAuthentication();
    $request = $authentication->authenticate($request);

    return $this->client->sendRequest($request);
}

當我var_dump $request變量時,在請求中看不到任何正文。 API響應就像沒有發送正文一樣,對此提供了支持。 我在郵遞員中對此進行了交叉檢查。 如您所見,主體指定了過濾器和分頁,因此很容易看到我得到的結果實際上未被過濾。

郵遞員中的相同請求(帶有正文)可以完美地工作。

由於參數可以是StreamInterface類型,因此我創建了一個流,並將主體傳遞給它。 也沒用。

無需使用json_encode()即可創建簡單的JSON請求...請參閱文檔

use GuzzleHttp\Client;

$client = new Client([
    'base_uri' => 'https://app.absence.io/api/v2',
    'timeout'  => 2.0
]);

$response = $client->request('POST', '/absences', ['json' => $body]);

發現了問題,實際上我的POST正文不是空的。 事實證明,轉儲該Request不會暗示有關消息中包含的實際正文的任何​​信息。

我可以建議任何有類似問題的人使用http://httpbin.org/#/HTTP_Methods/post_post調試POST正文。

最后,問題是我的content_type標頭拼寫錯誤,因為服務器期望標頭Content-Type 因此,JSON數據作為表單數據發送。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM