ericgui
V2EX  ›  PHP

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

  •  
  •   ericgui · Oct 29, 2017 · 9762 views
    This topic created in 3133 days ago, the information mentioned may be changed or developed.
    我们用 PHP 写爬虫,需要在 guzzle 的 request options 里的 header 里,加上 cookie
    现在都是手动,就是先用浏览器点开网站,F12,复制 cookie,粘贴到代码里,
    这很傻逼,一方面 cookie 过一段会失效,二方面,始终无法自动获取到 cookie

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

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

    各位有什么好的建议么?

    还有一个疑惑,这属于 HTTP 协议学得不好,也来请教一下:

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

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

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

    http://php.net/manual/zh/function.curl-setopt.php
    CURLOPT_COOKIEJAR
    mingyun
        13
    mingyun  
       Nov 5, 2017
    @8355
    picone
        14
    picone  
       Nov 6, 2017
    如果用 curl 提取的话,可以获取返回的 header,正则提取出你需要的 cookie。
    如果只是一个用户的话可以用 CURLOPT_COOKIEJAR,不过这个玩意要读文件,不方便存数据库里面,而且无用的 cookie 可能很多。
    wk110
        15
    wk110  
       Nov 10, 2017
    学习到了
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   949 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 59ms · UTC 21:42 · PVG 05:42 · LAX 14:42 · JFK 17:42
    ♥ Do have faith in what you're doing.