GuzzleHttp

1、GuzzleHttp从HTTP调用获取cookie的值

$client = new \GuzzleHttp\Client();
$jar = new \GuzzleHttp\Cookie\CookieJar();
$res = $client->request('GET', 'https://xxx.com',[
    'cookies' => $jar
]);

$cookJar = $jar->getIterator();  //获取的是一个GuzzleHttp\Cookie\SetCookie对象
$cookies = [];
foreach ($cookJar as $k=>$v){
    $ck = $v->toArray();                    //转为数组,更多方法见GuzzleHttp\Cookie\CookieJar
    $cookies[$ck['Name']] = $ck['Value'];  //注意键为大写
}
var_dump($cookies);

//++++++++++++++++++++++++或者++++++++++++++++++++++++++++++
$jar = new \GuzzleHttp\Cookie\CookieJar();
$client = new \GuzzleHttp\Client(['cookies' => $jar]);
$r = $client->request('GET', 'https://xxx.com');
$cookJar = $jar->getIterator();    //后续一样

设置cookie

$cookieJar = CookieJar::fromArray([
            'PHPSESSID' => 'b68212de1826c64d77b69dc514c2a9cb'
        ], 'www.devkang.com');  // 此处记得请求域名需要保持跟请求的url host一致,否则不会携带此cookie。

 guzzle 自身的重定向功能好像不支持携带cookie

public function getCookies($redirect, $cookies = '')
    {
        $client = new \GuzzleHttp\Client();
        $response = $client->request('GET', $redirect, [
            'allow_redirects' => false  //关闭自动重定向
        ]);
        if ($response->getStatusCode() === 302) {
            $redirect = $response->getHeaderLine('Location');          //手动跳转,
            //$cookieArr = $response->getHeaderLine('Set-Cookie');      //返回字符串
            $cookieArr =  $response->getHeader('Set-Cookie');           //返回数组
            //Set-Cookie的数据如:passport_csrf_token=2fee97d9235aa7d2c1a0ce4cc78fefc1; Path=/; Domain=douyin.com; Max-Age=5184000; Secure; SameSite=None  //需要处理
            $newCookie = $this->cookieVal($cookieArr);
            $cookies = $cookies .$newCookie;
            $this->getCookies($redirect, $cookies);  //重定向的页面可能还有cookie
        }else{
            $cookieArr =  $response->getHeader('Set-Cookie');
            $newCookie = $this->cookieVal($cookieArr);
            $cookies = $cookies .$newCookie;
        }
        $cookies = rtrim($cookies,'; ');
        return $cookies;
    }

    //整理cookie
    private function cookieVal($arr)
    {
        $cookies = '';
        foreach ($arr as $k => $v) {
            $cookieArr = explode(';', $v);
            $cookies = $cookies .$cookieArr[0] .'; ';
        }
        return $cookies;
    }

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值