向某个url
发送get请求html
requests.get("https://www.baidu.com")
发送一个post请求python
requests.post("https://www.baidu.com",data={"name":"zhuyu"})
发送其余类型的请求也均可以json
get请求传递参数服务器
arg = {"name":"zhuyu","password":"123"} requests.get("www.baidu.com",params=ars)
post请求传递参数cookie
data = {"key":"value"} requests.post("www.baidu.com",data=data)
获取响应的内容网络
response = requests.get("www.baidu.com") html = response.text # html就是网站的源码 url = response.url # 请求的url
二进制响应内容session
response.content # 返回的是二进制数据
json响应内容post
response.json # 若是响应的是json格式,它会自动帮你处理json数据,若是不能转换的话,会抛出异常 # 注意有的服务器在失败的响应也会返回json对象,请使用raise_for_status()或者status_code进行校验
url = "www.baidu.com" headers = { "user-agent":"xixi" } response = requests.get(url=url,headers=headers)
传递相似html表单的数据网站
url = "www.baidu,com" data = {"name":"zhuyu"} requests.post(url=url,data=data)
传递json格式数据编码
import json url = "www.baidu,com" data = {"name":"zhuyu"} # 方式一: requests.post(url=url,data=json.dumps(data)) # 方式二: requests.post(url=url,json=data)
url = "www.baidu,com" files = {"file":open("a.txt","rb")} requests.post(url=url,files=files)
response = requests.get("www.baidu.com") status_code = response.status_code # 获取状态码 # 若是返回一个400,500的状态码,能够经过raise_for_status()来抛出异常
response.headers # 这是响应的头部信息
获取响应头的cookie信息
cookie = response.cookie #获取到cookie的字典
为requests设置cookie信息
# cookie它是RequestsCookieJar的对象 cookies = requests.cookoes.RequestsCookieJar() cookies.set("name","zhuyu") cookies.set("password":"123") requests.get(url,cookies=cookies)
history方法
这是response对象里的一个方法或者属性,它是一个对象列表,按照从最老到最近的请求进行排序的
allow_redirects参数,模式为True的
response = requests.get(url=url,allow_redirects=False) # 上面代码是禁止了重定向
你能够告诉reuqests在通过timeout参数设定的秒数时间以后中止等待响应
requests.get(url=url,timeout=5)
错误 | 异常 |
---|---|
遇到网络问题 | Requests会抛出ConnectionError异常 |
返回了不成功的状态码 | Response会抛出raise_fir_status异常 |
请求超时 | 抛出Timeout异常 |
若请求超过了设定的最大重定向次数 | 抛出TooManyRedirects异常 |
会话对象让你在可以跨请求保持某些参数
# 拿到一个会话对象,这个会话一样能实现requests中的方法 session = requests.Session() # 经过会话对象发送一个get请求到url session.get(url=url) ------------------------------------------------------ # 会话也可用来为请求方法提供数据 session = requests.Session() session.headers.update({"name":"zhuyu"}) session.get(url,headers={"age":22}) # 此时在本次请求的请求中有name:"zhuyu"&age:22,这两对键值对 ------------------------------------------------------ # 上面这个只是在会话层面,若是在方法层面呢?参数是不会被跨请求保持的 session = requests.Session() session.get(url=url,cookies={"name":"zhuyu"}) # 此时发送的get请求是带上"name"="zhuyu"这是cookie的 # 下面仍是同一个session对象,我再发一个get请求,此时我没有写cookies这个参数 session.get(url=url) # 结果:你会发现本次请求没有带上cookie
response = requests.get(url=url) # 列举下这行代码作了那几步 # 一、生成了一个Request的对象,里面包含着所携带的数据,将该对象发送到某个服务器去请求 # 二、一旦响应以后,就会产生一个Response的对象,这个对象包含着服务器传来的数据 # 三、最后将这个Response对象赋值给了response这个变量 ------------------------------------------------------------------------ response.headers # 就是响应的请求头 response.request.headers # 就是请求的请求头
import requests response = requests.get(url) # 其实请求最终仍是以session对象发送的, session.send(Request对象,**kwargs) ------------------------------------- from requests import Request,Session session = Session() req = Request("GET",url) request=PreparedRequest(req) # 官方文档说,咱们能够在session对象send以前,对PreparedRequest对象再进行一些操做 response = session.send(request, stream=strean, verify=verify, proxies=proxies, cert=cert, timeout=timeout) print (response.status_code)
Requests能够为HTTPS请求验证SSL证书,SSL验证默认是开启的,验证失败的话会抛出SSLError异常
# 设置证书路径 # 方式一: request.get(url=url,verify=路径) # 方式二: session = requests.Session() session.verify = 路径 # verify对应:SSL证书路径
# cert :指定证书的路径 requests.get(url=url,cert=路径) session = requests.Session() session.cert = 路径
requests
默认附带了一套它信任的证书,若是系统中装了certifi包,requests
会试图使用它里面的证书,这样用户就不须要在修改代码的状况下更新他们信任的证书,因此咱们常常更新certifi包
# stream:控制响应体内容的下载 response = requests.get(url,stream=True)
# requests能够上传文件 with open("a.txt","rb") as f: requests.post(url,data=f) # 注意:传送的数据也就是文件,应该是一个文件对象 # 强烈建议建议使用二进制
files = []
''' 可用的钩子:response,从一个请求产生的响应 用法:传递一个字典给hooks这个变量 {hook_name:callback_function} 这个callback_function会接收一个数据块做为它的第一个参数 hooks = dict(response=print_url) ''' def print_url(response,*args,**kwargs): pass
import requests proxies = { "http":"http://10.10.1.10:3128", "https":"https://10.10.1.10:1080" } response = requests.get(url=url,proxies=proxies)