免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 4130 | 回复: 1
打印 上一主题 下一主题

[clear][done]python 中如何追加自定义的cookie [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2014-08-25 15:07 |只看该作者 |倒序浏览
本帖最后由 bxfqing 于 2014-09-08 21:36 编辑

背景描述:
测试页面有如下的javascript,
  1. #       <script type="text/javascript">
  2. #        //Check Login
  3. #        function checkLogin(){
  4. #                    if(status && data.info){
  5. #                        ds.setCookie('username', username, 30);
  6. #                        toggleToken(status);
  7. # 。。。。。。
复制代码
打开网页,输入测试用户名:
654        25.637813        192.168.66.151        61.164.241.82        HTTP        756        GET /index.php?r=user/CheckUserStatus&username=1111&password=&_=1408949763960 HTTP/1.1
抓包看到的 当前cookie
PHPSESSID=ujbf0iqsfmkscqomipdvprs4s3; NSC_qbttqpsu=ffffffffc3a0da7e45525d5f4f58455e445a4a423660
输入测试pwd
1280        201.741714        192.168.66.151        61.164.241.82        HTTP        786        GET /index.php?r=user/CheckUserStatus&username=1111&password=11111&_=1408949940047 HTTP/1.1
js脚本会把当前用户添加到cookie中;
PHPSESSID=ujbf0iqsfmkscqomipdvprs4s3; NSC_qbttqpsu=ffffffffc3a0da7e45525d5f4f58455e445a4a423660; username=1111

我用python来模拟这个过程,使用的是LWPcookieJar
  1.         
  2.         cookieFilename = 'demolocalCookies.txt'
  3.         g_cookiejar = cookielib.LWPCookieJar(cookieFilename)     
  4.         opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(g_cookiejar))
  5.         urllib2.install_opener(opener)
复制代码
  1.         g_cookiejar.set_cookie(c)
  2.         print "DBG >>> Cookie  === :before urllib2.urlopen\n\t",g_cookiejar
  3.         check_us_req = urllib2.Request(check_userstatus_url,None,check_us_headers)
  4.         check_us_response = urllib2.urlopen(check_us_req)
  5.         check_us_result = check_us_response.read()
  6.         print "DBG >>> Cookie  === :after urllib2.urlopen\n\t",g_cookiejar
复制代码
输出的调试信息
  1. DBG >>> Cookie  === :before urllib2.urlopen
  2.         <_LWPCookieJar.LWPCookieJar[<Cookie NSC_qbttqpsu=ffffffffc3a0da7e45525d5f4f58455e445a4a423660 for passport.feng.com/>, <Cookie PHPSESSID=jt545q6regkj5me21k9rcqkbf5 for passport.feng.com/>, <Cookie username=1111 for passport.feng.com/>]>
  3. DBG >>> Cookie  === :after urllib2.urlopen
  4.         <_LWPCookieJar.LWPCookieJar[<Cookie NSC_qbttqpsu=ffffffffc3a0da7e45525d5f4f58455e445a4a423660 for passport.feng.com/>, <Cookie PHPSESSID=jt545q6regkj5me21k9rcqkbf5 for passport.feng.com/>]>
复制代码
有些疑问,在urlopen前,cookie都是三行,为什么抓包的时候,http request 中的cookie还是原来的2行了,cookie始终没有携带username发起请求?
我也试过下面的几个方法,都不行,目前比较迷茫,到底哪里写的不对
+CookieJar.add_cookie_header(request)
+CookieJar.set_cookie(cookie)
+Request.add_header(key, val)

论坛徽章:
0
2 [报告]
发表于 2014-08-27 17:13 |只看该作者
本帖最后由 bxfqing 于 2014-09-08 21:36 编辑

更新,Cookie构造方法有问题:
我把/usr/lib/python2.7/cookielib.py的源代码加了debug信息

  1.     def add_cookie_header(self, request):
  2.         """Add correct Cookie: header to request (urllib2.Request object).

  3.         The Cookie2 header is also added unless policy.hide_cookie2 is true.

  4.         """
  5.         _debug("add_cookie_header")
  6.         self._cookies_lock.acquire()
  7.         try:

  8.             self._policy._now = self._now = int(time.time())

  9.             cookies = self._cookies_for_request(request)
  10.             print '---',cookies

  11.             attrs = self._cookie_attrs(cookies)
  12.             print '+++',attrs
  13.             if attrs:
  14.                 if not request.has_header("Cookie"):
  15.                     request.add_unredirected_header(
  16.                         "Cookie", "; ".join(attrs))
  17.                     print '<<< ',"Cookie","; ".join(attrs)

  18.             # if necessary, advertise that we know RFC 2965
  19.             if (self._policy.rfc2965 and not self._policy.hide_cookie2 and
  20.                 not request.has_header("Cookie2")):
  21.                 for cookie in cookies:
  22.                     if cookie.version != 1:
  23.                         request.add_unredirected_header("Cookie2", '$Version="1"')
  24.                         break

  25.         finally:
  26.             self._cookies_lock.release()

  27.         self.clear_expired_cookies()
  28.         print '>>>',self._cookies_for_request(request)
复制代码
可以POST是带自定义的cookie信息了;

  1. <<< before Request
  2. <_LWPCookieJar.LWPCookieJar[<Cookie NSC_qbttqpsu=ffffffffc3a0da7e45525d5f4f58455e445a4a423660 for passport.feng.com/>, <Cookie PHPSESSID=mf2kvv1pbdc945sespksa8q9f7 for passport.feng.com/>, <Cookie username=1111 for passport.feng.com/>]>
  3. +++ None
  4. <<< after Request,before urlopen
  5. <_LWPCookieJar.LWPCookieJar[<Cookie NSC_qbttqpsu=ffffffffc3a0da7e45525d5f4f58455e445a4a423660 for passport.feng.com/>, <Cookie PHPSESSID=mf2kvv1pbdc945sespksa8q9f7 for passport.feng.com/>, <Cookie username=1111 for passport.feng.com/>]>
  6. --- [Cookie(version=0, name='username', value='1111', port=None, port_specified=False, domain='passport.feng.com', domain_specified=False, domain_initial_dot=False, path='/', path_specified=True, secure=False, expires=None, discard=True, comment=None, comment_url=None, rest={}, rfc2109=False), Cookie(version=0, name='NSC_qbttqpsu', value='ffffffffc3a0da7e45525d5f4f58455e445a4a423660', port=None, port_specified=False, domain='passport.feng.com', domain_specified=False, domain_initial_dot=False, path='/', path_specified=True, secure=False, expires=1409131162, discard=False, comment=None, comment_url=None, rest={'httponly': None}, rfc2109=False), Cookie(version=0, name='PHPSESSID', value='mf2kvv1pbdc945sespksa8q9f7', port=None, port_specified=False, domain='passport.feng.com', domain_specified=False, domain_initial_dot=False, path='/', path_specified=True, secure=False, expires=None, discard=True, comment=None, comment_url=None, rest={}, rfc2109=False)]
  7. 1<<<  Cookie username=1111; NSC_qbttqpsu=ffffffffc3a0da7e45525d5f4f58455e445a4a423660; PHPSESSID=mf2kvv1pbdc945sespksa8q9f7
  8. >>> [Cookie(version=0, name='username', value='1111', port=None, port_specified=False, domain='passport.feng.com', domain_specified=False, domain_initial_dot=False, path='/', path_specified=True, secure=False, expires=None, discard=True, comment=None, comment_url=None, rest={}, rfc2109=False), Cookie(version=0, name='NSC_qbttqpsu', value='ffffffffc3a0da7e45525d5f4f58455e445a4a423660', port=None, port_specified=False, domain='passport.feng.com', domain_specified=False, domain_initial_dot=False, path='/', path_specified=True, secure=False, expires=1409131162, discard=False, comment=None, comment_url=None, rest={'httponly': None}, rfc2109=False), Cookie(version=0, name='PHPSESSID', value='mf2kvv1pbdc945sespksa8q9f7', port=None, port_specified=False, domain='passport.feng.com', domain_specified=False, domain_initial_dot=False, path='/', path_specified=True, secure=False, expires=None, discard=True, comment=None, comment_url=None, rest={}, rfc2109=False)]
  9. send: 'POST /index.php?r=user/LoginProcess HTTP/1.1\r\nAccept-Encoding: identity\r\nContent-Length: 75\r\nAccept-Language: en-US,en;q=0.5\r\nConnection: close\r\nAccept: application/json, text/javascript, */*; q=0.01\r\nUser-Agent: Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:31.0) Gecko/20100101 Firefox/31.0\r\nHost: passport.feng.com\r\nCookie: username=1111; NSC_qbttqpsu=ffffffffc3a0da7e45525d5f4f58455e445a4a423660; PHPSESSID=mf2kvv1pbdc945sespksa8q9f7\r\nX-Requested-With: XMLHttpRequest\r\nContent-Type: application/x-www-form-urlencoded\r\n\r\nusername%3D=1111&password%3D=xxxxxxxx&wekey_token%3D=&check_code%3D='
  10. reply: 'HTTP/1.1 200 OK\r\n'
  11. header: Date: Wed, 27 Aug 2014 09:09:22 GMT
  12. header: Server: nginx/1.2
  13. header: Content-Type: text/html;charset=utf-8
  14. header: Transfer-Encoding: chunked
  15. header: X-Powered-By: PHP/5.5.1
  16. header: Expires: Thu, 19 Nov 1981 08:52:00 GMT
  17. header: Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
  18. header: Pragma: no-cache
  19. header: Set-Cookie: NSC_qbttqpsu=ffffffffc3a0da7e45525d5f4f58455e445a4a423660;expires=Wed, 27-Aug-2014 09:19:22 GMT;path=/;httponly
  20. header: X-Via: 1.1 lsh57:2 (Cdn Cache Server V2.0)
  21. header: Connection: close
  22. <<< after urlopen
  23. <_LWPCookieJar.LWPCookieJar[<Cookie NSC_qbttqpsu=ffffffffc3a0da7e45525d5f4f58455e445a4a423660 for passport.feng.com/>, <Cookie PHPSESSID=mf2kvv1pbdc945sespksa8q9f7 for passport.feng.com/>, <Cookie username=1111 for passport.feng.com/>]>
  24. {"status":"need_checkcode","info":{"item":"password","info":"\u8d26\u53f7\u4fe1\u606f\u4e0d\u80fd\u4e3a\u7a7a"}}
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP