requests模块 Posted 2021-01-13 wl443587
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了requests模块相关的知识,希望对你有一定的参考价值。
request说明
虽然Python的标准库中 urllib2 模块已经包含了平常我们使用的大多数功能,但是它的 API 使用起来让人感觉不太好,而 Requests 自称 “HTTP for Humans”,说明使用更简洁方便。
Requests 唯一的一个非转基因的 Python HTTP 库,人类可以安全享用:)
Requests 继承了urllib2的所有特性。Requests支持HTTP连接保持和连接池,支持使用cookie保持会话,支持文件上传,支持自动确定响应内容的编码,支持国际化的 URL 和 POST 数据自动编码。
1.发送请求
import requests
url = ‘http://www.baidu.org‘
r = requests.get(url)
print(r.status_code) # 获取返回状态
print(r.text)
说明:其他方式的请求格式一致
requests.get(url) #get请求
requests.post(url) #post请求
requests.put(url) #put请求
requests.delete(url) #delete请求
requests.head(url) #head请求
requests.option(url) #get请求
ps:以上的http请求,对于web系统一般只支持get和post,还有一些支持head
2. 传递参数
若http请求时带参数,那么就需要将参数加入到payload字典中,如下。
import requests
url = ‘http://www.baidu.org‘
payload = {‘name‘ :‘jsan‘ }
r = requests.get(url,params= payload )
print(r.status_code) # 获取返回状态
print(r.text)
3.post请求发送数据
除了get请求外,有时还需要发送一些编码为表单形式的数据。比如在登录的时候请求就为post。若要实现post的请求,只需要简单的传递一个字典给requests中的data参数,这样这个数据字典就会在发出请求的时候自动编码为表单形式。
import requests,json
url = ‘http://www.baidu.org‘
payload = {‘name‘ :‘jsan‘ }
r = requests.get(url,data = json.dumps(payload))
print(r.status_code) # 获取返回状态
print(r.text)
4.定制请求头
如果想为请求添加http头部,只需要传一个字典给header就行了。
import requests,json
url = ‘http://httpbin.org/post‘
headers = {‘User-Agent‘ :‘Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.112 Safari/537.36‘ }
r = requests.get(url,data = json.dumps({‘dt‘ :‘data‘ }),headers = headers)
print(r.status_code) # 获取返回状态
print(r.text)
5. 代理(proxies参数)
如果需要使用代理,你可以通过为任意请求方法提供 proxies
参数来配置单个请求:
import requests
# 根据协议类型,选择不同的代理
proxies = {
"http" : "http://12.34.56.79:9527" ,
"https" : "http://12.34.56.79:9527" ,
}
response = requests.get("https://www.baidu.com" , proxies = proxies)
print(response.text)
6.web客户端验证
如果是Web客户端验证,需要添加 auth = (账户名, 密码)
import requests
from requests.auth import HTTPBasicAuth
r = requests.get(url,auth = HTTPBasicAuth(‘user‘ ,‘password‘ ))
r = requests.get(url,auth=(‘user‘ ,‘password‘ )) # 简写
7.cookie与响应对象
(1)一个响应中包含有一些cookie,可快速访问他们
import requests
response = requests.get("http://www.baidu.com/" )
# 返回CookieJar对象
cookiejar = response.cookies
# 8. 将CookieJar转为字典:
cookiedict = requests.utils.dict_from_cookiejar(cookiejar)
print(cookiejar)
print(cookiedict)
(2)将自身的cookie发送到服务器,用cookie参数
import requests
response = requests.get("http://www.baidu.com/" )
# 自身的cookie数据
cookiejar = {}
r = requests.get(url=‘http://www.baidu.com‘ ,cookie = cookiejar)
8.sission
在 requests 里,session对象是一个非常常用的对象,这个对象代表一次用户会话:从客户端浏览器连接服务器开始,到客户端浏览器与服务器断开。
会话能让我们在跨请求时候保持某些参数,比如在同一个 Session 实例发出的所有请求之间保持 cookie 。
实现人人网登录
import requests
# 1. 创建session对象,可以保存Cookie值
ssion = requests.session()
# 2. 处理 headers
headers = {"User-Agent" : "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.99 Safari/537.36" }
# 3. 需要登录的用户名和密码
data = {"email" :"[email protected] " , "password" :"alarmchime" }
# 4. 发送附带用户名和密码的请求,并获取登录后的Cookie值,保存在ssion里
ssion.post("http://www.renren.com/PLogin.do" , data = data)
# 5. ssion 包含用户登录后的Cookie值,可以直接访问那些登录后才可以访问的页面
response = ssion.get("http://www.renren.com/410043129/profile" )
# 6. 打印响应内容
print(response.text)
以上是关于requests模块的主要内容,如果未能解决你的问题,请参考以下文章
django.core.exceptions.ImproperlyConfigured: Requested setting DEFAULT_INDEX_TABLESPACE的解决办法(转)(代码片段
如何使用模块化代码片段中的LeakCanary检测内存泄漏?
C#-WebForm-★内置对象简介★Request-获取请求对象Response相应请求对象Session全局变量(私有)Cookie全局变量(私有)Application全局公共变量Vi(代码片段
Python练习册 第 0013 题: 用 Python 写一个爬图片的程序,爬 这个链接里的日本妹子图片 :-),(http://tieba.baidu.com/p/2166231880)(代码片段
如何有条件地将 C 代码片段编译到我的 Perl 模块?
推进学说代码片段