如何获取获取302 重定向页面的cookie

最近在做网站seo数据的统计,我需要从百度统计那里抓取信息存入我的数据。

我选择PHP + Guzzle6 帮我完成这项工作。

但是实现的功能出了一些问题。我使用的是百度的一个胖URL,在地址框里输入url。

类似这种:https://tongji.baidu.com/web/welcome/ico?s=sdfsdfsfdsfsdfsfsfsdfsf

然后输入密码就好了,经过分析,这个属于form-data范畴。

随后,登入成功了,会做个302跳转,

clipboard.png

现在我想获取跳转后的cookie值,然而实操我获取不到。

我的做法:

  1. 获取首次访问胖url的cookie
  2. 将上一步的cookie,passwd等参数再次传给胖url,获取登录成功后的页面(即302跳转页面)cookie值
  3. 带着这个cookie去访问跳转后的页面,拉取统计数据。

但是,我对于重定向cookie的获取一筹莫展,google了一些,比如说跟着重定向,设置header值,都没有成功。

我的问题:

我需要获取重定向cookie的思路,大家能帮忙吗?

阅读 8.9k
3 个回答

从截图来看,这个cookie属于请求头request的cookie,使用浏览器的debug工具追踪一下在哪里相应了这个cookie的吧,这样才能拿到cookie

新手上路,请多包涵

selenium试过吗

guzzle 自身的重定向功能好像不支持携带cookie,需要手动来进行redirect 跳转。
1.关闭allow_redirects (关闭字段重定向)
2.判断$response 是否是302
3.如果是重定向
4.则请求这个回调函数

    public function callback($redirect, $cookie)
    {
        $client = new Client();
        $response = $client->request('GET', $redirect, [
            'headers' => [
                'Cookie' => $cookie,
            ],
            'allow_redirects' => false
        ]);
        if ($response->getStatusCode() === 302) {
            $redirect = $response->getHeaderLine('Location');
            $cookie = $response->getHeaderLine('Set-Cookie') ?? $cookie;
            if (strpos($redirect, 'http') === false) {
                $redirect = self::$adminBaseLink . $redirect;
            }
            $cookie = $this->callback($redirect, $cookie);
        }
        $cookie = $response->getHeaderLine('Set-Cookie') ?? $cookie;
        return $cookie;
    }
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题