python请求时cookie处理

本文介绍了一种使用Python自动处理HTTP Cookie的方法,通过简单的脚本实现登录过程并获取Cookie,进而访问需要登录才能查看的页面。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近想写一个自动测试项目全流程的脚本,由于接口是 http 协议的且许多接口需要登陆,所以需要处理cookie,发现实现起来很简单,如下:
#!python
# -*- coding: utf-8 -*-

import cookielib, urllib2


def testWithCookie():
    '''
        自动处理 cookie
    '''
    url1 = 'http://domain.com/login?xxxx'
    cj = cookielib.CookieJar()
    opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cj))
    urllib2.install_opener(opener)
    resp = urllib2.urlopen(url1)
    print(resp.read())
    print cj._cookies.values()
    url2 = 'http://domain.com/xxx'
    resp = urllib2.urlopen(url2)
    print resp.read()


if __name__ == '__main__':
    testWithCookie()

其中 url2 是需要登陆后才能访问的,否则会返回错误,通过输出返回结果很容易判断出cookie生效了
### Python中设置包含Cookie的HTTP请求头 在Python中,可以通过多种方式来处理带有Cookie请求头。一种常见的方式是利用`urllib.request`模块配合`http.cookiejar.CookieJar()`对象来进行操作[^1]。 ```python import http.cookiejar import urllib.request cookiejar = http.cookiejar.CookieJar() handler = urllib.request.HTTPCookieProcessor(cookiejar) opener = urllib.request.build_opener(handler) response = opener.open("http://www.example.com") for cookie in cookiejar: print(f"{cookie.name}={cookie.value}") ``` 上述代码展示了如何初始化一个`CookieJar`实例用于存储Cookies,并通过`HTTPCookieProcessor`将其集成到自定义的`OpenerDirector`中。当执行打开URL的操作,任何返回的Set-Cookie响应都会被自动存入`CookieJar`内;而后续发出的所有请求都将携带这些已保存下来的Cookies。 如果希望手动向请求添加特定的Cookie,则可以构建自己的Request对象并指定Headers参数: ```python from urllib import request headers = { "Cookie": "name=value; name2=value2" } req = request.Request(url="http://example.com", headers=headers) with request.urlopen(req) as resp: html = resp.read().decode('utf-8') print(html) ``` 这段脚本说明了怎样直接把想要加入请求里的Cookie作为字符串形式赋给Header字典中的"Cookie"键值对,在发起网络连接前先准备好含有目标站点所需认证信息或其他个性化配置的数据包[^2]。 对于更复杂的场景比如异步编程环境下的Aiohttp库来说,也可以很方便地完成同样的任务: ```python import aiohttp import asyncio async def fetch(session, url): async with session.get(url) as response: return await response.text() async def main(): cookies = {"key": "value"} async with aiohttp.ClientSession(cookies=cookies) as session: html = await fetch(session, 'http://example.com/') print(html) if __name__ == '__main__': loop = asyncio.get_event_loop() loop.run_until_complete(main()) ``` 这里展示了一个简单的例子,其中创建了一个新的ClientSession并将预设好的Cookies传递进去。之后每次基于此session发起GET或POST方法调用的候就会自动带上这些Cookies一起发送出去[^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值