PHP 爬虫:怎样拿到浏览器的 cookie? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
ericgui
V2EX    PHP

PHP 爬虫:怎样拿到浏览器的 cookie?

  •  
  •   ericgui 2017-10-29 11:13:29 +08:00 9333 次点击
    这是一个创建于 2905 天前的主题,其中的信息可能已经有所发展或是发生改变。
    我们用 PHP 写爬虫,需要在 guzzle 的 request options 里的 header 里,加上 cookie
    现在都是手动,就是先用浏览器点开网站,F12,复制 cookie,粘贴到代码里,
    这很傻逼,一方面 cookie 过一段会失效,二方面,始终无法自动获取到 cookie

    Python 的 requests 包就可以,但显然我还是希望用 php 解决问题。

    尝试过各种方式,均失败。

    各位有什么好的建议么?
    还有一个疑惑,这属于 HTTP 协议学得不好,也来请教一下:

    如果首次访问网站,仍然会有 cookie,而且 cookie 里包含有 sessionID,这就很邪门,
    如果要爬取的网页不是首次访问网站, 这个可以理解,因为你已经和网站建立连接了,当然会有 sessionID。
    但首次访问网站,仍然会有 sessionID 包含在 cookie 里,实在理解不能,这 sessionID 哪里来的? TCP 三次握手的时候 server 发送的?

    请高人赐教。
    15 条回复    2017-11-10 19:48:46 +08:00
    lifeintools
        1
    lifeintools  
       2017-10-29 11:19:03 +08:00 via iPhone
    使用自动化工具,获取 cookie.那些浏览器测试用的框架。可以考虑下。selenium
    lhx2008
        2
    lhx2008  
       2017-10-29 11:27:10 +08:00 via Android
    在 php 里面模拟登录,就可以拿到 cookies 了,如果要半自动就在 php 里面执行 python 的 selenium 弹浏览器拿 cookies 再返回给 php
    第一次访问没 cookies,访问后网站会给你一个 cookies,里面有 seeson id
    jugelizi
        3
    jugelizi  
       2017-10-29 11:31:04 +08:00
    你都会 F12 了把浏览器清空看 header 的 set-cookie
    还有 curl 是可以拿到 cookie 的
    ericgui
        4
    ericgui  
    OP
       2017-10-29 12:04:45 +08:00
    @lifeintools facebook webdriver 难用的一逼
    AchillesNeo
        5
    AchillesNeo  
       2017-10-29 12:07:02 +08:00
    ### 服务端测试结果

    UserSystem_BasicDataService_TestCase_20160415110013 测试完成,共 7 个测试用例,成功 6 个,失败 1 个。
    gouchaoer
        6
    gouchaoer  
       2017-10-29 12:10:35 +08:00 via Android
    Facebook webdriver 写的很好啊,拿来驱动 selenium 毫无问题,至于自动管理 cookie 的话 guzzle 应该会解析 header 里的 cookie 更新 httpclient 缓存的吧
    wdlth
        7
    wdlth &nbs;
       2017-10-29 12:13:05 +08:00
    guzzle 不是有 CookieJar 么?可以保存 Cookie,再利用的。
    allenhu
        8
    allenhu  
       2017-10-29 15:21:16 +08:00 via Android
    不知道 cookiejar 吗?
    skyjerry
        9
    skyjerry  
       2017-10-29 16:45:03 +08:00 via iPhone
    sessionid 为什么会想到 tcp 三次握手?请求服务器的资源,服务器返回给你的东西带着 session 很奇怪吗?
    jq8778
        10
    jq8778  
       2017-10-29 17:27:27 +08:00
    COOKIE 植入一般有两种
    一种是 HTTP 服务端返回 SET COOKIE,这种很好读
    还有一种是用 JS 来植入
    这种就要分析对应代码了...
    to2false
        11
    to2false  
       2017-10-30 09:29:33 +08:00
    @skyjerry 感觉他需要先补充下基本知识
    8355
        12
    8355  
       2017-10-30 09:49:16 +08:00
    只用这个保存到文件就可以了啊.... 楼上讨论那么多在说啥...
    curl 可以保存 cookie 的

    http://php.net/manual/zh/function.curl-setopt.php
    CURLOPT_COOKIEJAR
    mingyun
        13
    mingyun  
       2017-11-05 20:46:59 +08:00
    @8355
    picone
        14
    picone  
       2017-11-06 16:22:28 +08:00
    如果用 curl 提取的话,可以获取返回的 header,正则提取出你需要的 cookie。
    如果只是一个用户的话可以用 CURLOPT_COOKIEJAR,不过这个玩意要读文件,不方便存数据库里面,而且无用的 cookie 可能很多。
    wk110
        15
    wk110  
       2017-11-10 19:48:46 +08:00
    学习到了
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     1358 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 25ms UTC 16:45 PVG 00:45 LAX 09:45 JFK 12:45
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86