首先,我们需要了解一下Python中进行POST提交HTTP数据的基本方法。
Python模拟POST提交HTTP数据的基本方法
要实现POST提交HTTP数据,可以使用Python中的requests库。requests库是Python HTTP库的一种,它允许您以简单而优雅的方式发送HTTP/1.1请求。
首先需要安装requests库:
pip install requests
然后,我们可以通过以下方法来模拟POST提交HTTP数据:
import requests
# 构造POST请求参数
payload = {'key1': 'value1', 'key2': 'value2'}
# 构造请求头
headers = {'content-type': 'application/json'}
# 发送POST请求
response = requests.post('http://www.example.com', data=payload, headers=headers)
# 打印响应内容
print(response.text)
这里的payload是一个Python字典,它包含了POST请求中的参数。我们还可以添加headers参数,指定请求头信息。
Python获取并使用Cookie值
HTTP Cookie是服务器发送给客户端的一小段数据,客户端再每次向服务器发送请求时,都会携带该Cookie信息。这样,服务器就能够根据Cookie来识别每一个客户端。
Python中可以使用requests库的Session类来获取和管理Cookie值。Session对象能够在多个请求之间保持一些参数和Cookie信息等。
我们可以用以下代码建立一个Session对象,并通过访问已知的网站获取Cookie:
import requests
# 建立一个Session对象
session = requests.Session()
# 发送一个GET请求,获取Cookie值
response = session.get('http://www.example.com')
# 输出Cookie值
print(response.cookies)
之后,我们可以在发送POST请求时,使用Session对象来自动添加Cookie信息:
import requests
# 建立一个Session对象
session = requests.Session()
# 发送一个GET请求,获取Cookie值
session.get('http://www.example.com')
# 构造POST请求参数
payload = {'key1': 'value1', 'key2': 'value2'}
# 发送POST请求,并自动添加Cookie信息
response = session.post('http://www.example.com', data=payload)
# 打印响应内容
print(response.text)
这样就可以在POST请求中自动添加Cookie信息了。
示例说明
现在我们来看两个具体的示例。
示例1:模拟登陆知乎获取个人主页内容
首先,我们需要分析知乎登陆界面的请求参数和Cookie信息。可以在浏览器中F12打开开发者工具,在Network标签下进行请求分析。
根据知乎登陆界面的请求信息,我们可以构造如下Python代码:
import requests
# 建立一个Session对象
session = requests.Session()
# 获取_xsrf值
response = session.get('https://www.zhihu.com')
xsrf_token = response.cookies.get('_xsrf')
# 构造POST请求参数
payload = {
'_xsrf': xsrf_token,
'password': 'PASSWORD',
'phone_num': 'PHONE_NUM',
'captcha': '',
'remember_me': 'true',
}
# 添加请求头信息
headers = {
'Referer': 'https://www.zhihu.com/',
'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8',
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3',
'X-Requested-With': 'XMLHttpRequest',
}
# 发送POST请求,模拟登陆
login_url = 'https://www.zhihu.com/login/phone_num'
response = session.post(login_url, data=payload, headers=headers)
# 输出登陆结果
print(response.text)
# 访问个人主页,获取内容
headers = {
'Referer': 'https://www.zhihu.com/',
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36',
'X-Requested-With': 'XMLHttpRequest',
}
profile_url = 'https://www.zhihu.com/people/USERNAME/activities'
response = session.get(profile_url, headers=headers)
# 输出个人主页的内容
print(response.text)
这里需要替换PASSWORD、PHONE_NUM和USERNAME参数为自己的值。
示例2:模拟京东添加购物车
京东的添加购物车请求需要携带Cookie信息,否则会被服务器拒绝。我们可以使用Session对象自动管理Cookie信息。
以添加【京东自营】小米防护口罩为例,构造如下Python代码:
import requests
# 建立一个Session对象
session = requests.Session()
# 添加请求头信息
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36',
'Referer': 'https://item.jd.com/100006834011.html',
}
# 访问详情页,获取商品ID和价格信息
detail_url = 'https://item.jd.com/100006834011.html'
response = session.get(detail_url, headers=headers)
product_id = response.url.split('/')[-1].split('.')[0]
price = response.html.find('#price', first=True).text
# 构造POST请求参数
payload = {
'pid': product_id,
'pcount': '1',
'ptype': '1'
}
# 构造添加购物车请求URL
cart_url = 'https://cart.jd.com/gate.action?pid={}&pcount=1&ptype=1'.format(product_id)
# 发送添加购物车请求
response = session.post(cart_url, data=payload, headers=headers)
# 判断是否添加成功
if '您的购物车已添加一件商品' in response.text:
print('成功添加一件商品,总价:{}'.format(price))
else:
print('添加商品失败')
这里使用requests_html库来解析HTML内容。可以通过如下命令安装:
pip install requests_html
这样我们就可以通过Python模拟POST提交HTTP数据和使用Cookie值,实现一些有趣的功能了。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Python模仿POST提交HTTP数据及使用Cookie值的方法 - Python技术站