PHP GuzzleHTTP |在第一个请求失败后,基于Cookie的身份验证有效吗?

时间:2019-08-03 02:13:48

标签: php laravel cookies guzzle

相关

Guzzle Quickstart | Cookies

注释

  • 此特定端点拒绝所有GET请求,但网站本身面向客户,因此它接受GET请求
  • 我需要一个cookie才能发布到该端点,但是直到我向该端点发出请求之前,我才能获取该cookie
  • 第一个请求失败(禁止访问403个),但它获取下一个请求所需的cookie...。

尝试

  • 没有cookie ...失败
  • 带有'Cookie'=>'cookie'标头...失败
  • 以用户身份手动浏览网站时,从Firefox开发工具中的GET请求复制了cookie ...失败
  • 以用户身份手动浏览网站时,将POST请求中的cookie复制到Firefox Dev工具中的特定端点...
  • 在上述链接中阅读Guzzle Doc,并将['cookies'=> true]传递给Guzzle Client
  • 使用第一个请求向首页发出GET请求,然后尝试第二个发布请求...失败
  • 向特定端点发出了两个相同的POST请求...起作用了!

问题

有没有一种方法可以在没有故意使请求失败的情况下获取授权的cookie?还是这个问题只是端点特定的,他们不希望我以这种方式访问​​他们的网站...

为什么我不能使用GET请求中的cookie?

代码


$client = new GuzzleHttp\Client(['cookies' => true]);

$formParams = [
    'json' => [
        'request' => [
            'orderId' => 'XYZ123',
            'emailId' => 'name@email.com'
        ]
    ],
    'headers' => [
        'Host' => 'secure2.homedepot.com',
        'User-Agent' => 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:68.0) Gecko/20100101 Firefox/68.0',
        'Accept' => 'application/json, text/plain, */*',
        'Accept-Language' => 'en-US,en;q=0.5',
        'Accept-Encoding' => 'gzip, deflate, br',
        'Referer' => 'https://secure.website.com/order/view/tracking',
        'Content-Type' => 'application/json;charset=utf-8',
        'Content-Length' => '88',
        'Connection' => 'keep-alive'
    ]
];


// first request will fail (403 Forbidden) ... but it gets the cookie
try {
    $response = $this->client->request('POST', 'https://secure.website.com/order/guest/details', $formParams);
} catch (\Exception $e) {
    Log::warning('first request failed ... but we wanted it too?');
}

// second request ... this works!
try {
    // Log::warning(print_r($formParams, true));
    $response = $this->client->request('POST', 'https://secure.website.com/order/guest/details', $formParams);
    return $response;
} catch (\Exception $e) {
    Log::warning($e->getMessage());
    return false;
}



0 个答案:

没有答案