当前位置: 首页 > 工具软件 > Requests(PHP) > 使用案例 >

Python requests

呼延智明
2023-12-01

1.request

  • requests.request(method, url, **kwargs)
  • requests.get(url, params=None, **kwargs)
  • requests.options(url, **kwargs)
  • requests.head(url, **kwargs)
  • requests.post(url, data=None, json=None, **kwargs)
  • requests.put(url, data=None, **kwargs)
  • requests.patch(url, data=None, **kwargs)
  • requests.delete(url, **kwargs)

除了requests.request()外,其余7个方法与http协议中的请求方法一一对应。阅读源码后,不难发现,这7个方法其实都是在调用requests.request()方法

参数解释
method各种方法,比如get、options、head、post、put、patch、delete,当然也支持自定义扩展
url请求的url
params请求携带的params
data请求body中的data
json请求body中的json格式的data
headers请求携带的headers
cookies请求携带的cookies
files上传文件时使用
auth身份认证时使用
timeout设置请求的超时时间,可以设置连接超时和读取超时
allow_redirects是否允许重定向,默认True,即允许重定向
proxies设置请求的代理,支持http代理以及socks代理(需要安装第三方库"pip install requests[socks]")
verify用于https请求时的ssl证书验证,默认是开启的,如果不需要则设置为False即可
stream是否立即下载响应内容,默认是False,即立即下载响应内容
cert用于指定本地文件用作客户端证书

2.response

属性或属性方法解释
r.status_code响应的http状态码,比如404和200
r.headers响应头,可单独取出某个字段的值,比如(r.headers)['content-type']
r.raw原始响应,表示urllib3.response.HTTPResponse对象。使用raw时,要求在请求时设置“stream=True”
r.url请求的最终地址
r.encoding要解码的r.text的编码方式
r.history请求的历史记录,可以用于查看重定向信息,以列表形式展示,排序方式是从最旧到最新的请求
r.reason响应状态的描述,比如 "Not Found" or "OK"
r.cookies服务器发回的cookies,RequestsCookieJar类型
r.elapsed从发送请求到响应到达之间经过的时间量,可以用于测试响应速度。比如r.elapsed.microseconds表示响应到达需要多少微秒
r.requestPreparedRequest对象,可以用于查看发送请求时的信息,比如r.request.headers查看请求头
r.ok检查”status_code“的值,如果小于400,则返回True,如果不小于400,则返回False 
r.is_redirect判断是否重定向,返回True or False
r.is_permanent_redirect判断是否永久重定向,返回True or False
r.next返回重定向链中下一个请求的PreparedRequest对象
r.apparent_encoding用chardet库判断出的编码方式
r.content响应的内容,byte类型
r.text响应的内容,unicode类型
r.links响应的解析头链接
  • 较为常用的r.json()方法,用于将响应解析成json格式。
  • 应对stream时的iter_content()iter_line()方法,避免响应内容过大占用大量内存

3.session和cookie

session对象能够让我们跨http请求保持某些参数,即让同一个session对象发送的请求头携带某个指定的参数

import requests

s = requests.Session()
# 第一步:发送一个请求,用于设置请求中的cookies
# tips: http://httpbin.org能够用于测试http请求和响应
s.get('http://httpbin.org/cookies/set/sessioncookie/123456789')
# 第二步:再发送一个请求,用于查看当前请求中的cookies
r = s.get("http://httpbin.org/cookies")
print(r.text)
import requests

s = requests.Session()
//每次请求都会携带
s.headers.update({'x-test': 'true'})
# both 'x-test' and 'x-test2' are sent
#headers参数仅本次请求携带
r1 = s.get('http://httpbin.org/headers', headers={'x-test2': 'true'})
print(r1.text)
# 'x-test' is sent
r2 = s.get('http://httpbin.org/headers')
print(r2.text)
import requests

s = requests.session()
#每次请求都携带cookie
s.cookies.update({'cookies_are': 'cookie'})
r = s.get(url='http://httpbin.org/cookies')
print(r.text)
import requests

jar = requests.cookies.RequestsCookieJar()
jar.set('tasty_cookie', 'yum', domain='httpbin.org', path='/cookies')
jar.set('gross_cookie', 'blech', domain='httpbin.org', path='/elsewhere')
url = 'http://httpbin.org/cookies'
r = requests.get(url, cookies=jar)
print(r.text)

requests还提供了RequestsCookieJar对象供我们使用,它的行为类似字典,但接口更为完整,适合跨域名跨路径使用

4.hooks

hook机制,让我们能够在请求得到响应之后去做一些自定义的操作

import requests

# 钩子函数1
def print_url(r, *args, **kwargs):
    print("raw_url "+r.url)
# 钩子函数2
def change_url(r, *args, **kwargs):
    r.url = 'http://change.url'
    print("changed_url "+r.url)
    return r  # 其实没有这句话,也可以修改r.url,因为r是response对象而非普通数值,但requests官方似乎误认为回调函数一定要有return才能替换传入的数据

# tips: http://httpbin.org能够用于测试http请求和响应
url = 'http://httpbin.org/cookies'
response = requests.get(url, hooks=dict(response=[print_url, change_url]))
print("result_url "+response.url)

 

 

 

 

 

 

 类似资料:

相关阅读

相关文章

相关问答