Loading... # 发送请求 HTTP请求类型有这么几种:GET,POST,PUT,DELETE,HEAD 以及 OPTIONS,下面分别进行介绍 ## request request是requests中的一个重要方法,所有的HTTP请求都是基于这个方法 ``` request(method, url, **kwargs) ``` - method:请求方式``OPTIONS``, ``HEAD``, ``POST``, ``PUT``, ``PATCH``, or ``DELETE`` - url:请求的网址 **kwargs:其他可选参数 - params:字典或字节序列,作为参数增加到url中 - data:字典、字节序列或文件对象,作为Request的内容 - json:JSON格式的数据,作为Request的内容。 - headers:字典,HTTP定制请求头 - cookies:字典或CookieJar,Request中的cookie - files:字典,用于传输文件 - auth:元组,支持HTTP的认证功能 - timeout:设定超时时间,单位为秒 - allow_redirects:布尔,重定向开关。默认True - proxies:字典,设定代理服务器,可以增加登录认证 - verify:布尔,认证SSL证书的开关。默认True - stream:布尔,获取内容立即下载开关。默认True - cert:本地SSL证书路径 - stream:布尔,获取内容立即下载开关。默认True ## GET请求 ``` get(url, params=None, **kwargs) ``` 参数与上面的request一致,例如: ``` r = requests.get('https://api.github.com/events') ``` ## POST请求 ``` post(url, data=None, json=None, **kwargs) ``` 参数与上面的request一致,例如: ``` r = requests.post('http://httpbin.org/post', data = {'key':'value'}) ``` ## PUT请求 ``` put(url, data=None, **kwargs) ``` 参数与上面的request一致,例如: ``` r = requests.put('http://httpbin.org/put', data = {'key':'value'}) ``` ## DELETE请求 ``` delete(url, **kwargs) ``` 参数与上面的request一致,例如: ``` r = requests.delete('http://httpbin.org/delete') ``` ## HEAD请求 ``` head(url, **kwargs) ``` 参数与上面的request一致,例如: ``` r = requests.head('http://httpbin.org/get') ``` ## OPTIONS请求 ``` options(url, **kwargs) ``` 参数与上面的request一致,例如: ``` r = requests.options('http://httpbin.org/get') ``` # 向url传递参数 ``` url_params = {'key':'value'} # 字典传递参数,如果值为None的键不会被添加到url中 r = requests.get('your url',params = url_params) print(r.url) # 打印内容your url?key=value ``` # 响应内容 ``` r.encoding #获取当前的编码 r.encoding = 'utf-8' #设置编码 r.text #以encoding解析返回内容。字符串方式的响应体,会自动根据响应头部的字符编码进行解码。 r.content #以字节形式(二进制)返回。字节方式的响应体,会自动为你解码 gzip 和 deflate 压缩。 r.request.headers #获取请求头 r.headers #以字典对象存储服务器响应头,但是这个字典比较特殊,字典键不区分大小写,若键不存在则返回None r.headers['Content-Type'] #访问headers的Content-Type内容 r.headers.get('Content-Type') #访问响应头部分内容的两种方式 r.request._cookies #获取请求的cookie r.cookies #获取响应的cookie r.cookies['example_cookie_name'] #读取cookies r.history #返回重定向信息,当然可以在请求是加上allow_redirects = false 阻止重定向 r.status_code #响应状态码 r.raw #返回原始响应体,也就是 urllib 的 response 对象,使用 r.raw.read() r.ok # 查看r.ok的布尔值便可以知道是否登陆成功 #*特殊方法*# r.json() #Requests中内置的JSON解码器,以json形式返回,前提返回的内容确保是json格式的,不然解析出错会抛异常 r.raise_for_status() #失败请求(非200响应)抛出异常 ``` # 定制请求头 如果你想为请求添加 HTTP 头部,只要简单地传递一个 dict 给 headers 参数 ``` url = 'http://www.baidu.com/' headers = {'content-type': 'application/json', 'User-Agent': 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.104 Mobile Safari/537.36'} r = requests.get(url, headers=headers) ``` # Cookie ``` header = {'user-agent': 'my-app/0.0.1''} cookie = {'key':'value'} r = requests.get/post('your url',headers=header,cookies=cookie) ``` # 发送post请求 通常,你想要发送一些编码为表单形式的数据——非常像一个 HTML 表单。要实现这个,只需简单地传递一个字典给 data 参数。你的数据字典在发出请求时会自动编码为表单形式: ``` payload = {'key1': 'value1', 'key2': 'value2'} r = requests.post("http://httpbin.org/post", data=payload) print(r.text) { ... "form": { "key2": "value2", "key1": "value1" }, ... } ``` post发送json请求: ``` import requests import json payload = {'some': 'data'} r = requests.post('https://api.github.com/some/endpoint', data=json.dumps({'some': 'data'})) #如果传递的payload是string而不是dict,需要先调用dumps方法格式化一下 # r = requests.post(url, json=payload) #这中不用转json较方便 print(r.json()) ``` # post多部分编码文件 Requests 使得上传多部分编码文件变得很简单: ``` url = 'http://httpbin.org/post' files = {'file': open('report.xls', 'rb')} r = requests.post(url, files=files) ``` # 超时 ``` r = requests.get('url',timeout=1) #设置秒数超时,仅对于连接有效 ``` # 设置访问代理 ``` proxies = { "http": "http://10.10.1.10:3128", "https": "http://10.10.1.100:4444", } r = requests.get('http://m.ctrip.com', proxies=proxies) #如果代理需要用户名和密码,则需要这样: proxies = { "http": "http://user:pass@10.10.1.10:3128/", } ``` # 会话对象 会话对象让你能够跨请求保持某些参数。它也会在同一个 Session 实例发出的所有请求之间保持 cookie ``` import requests # 请求数据url member_url = 'https://www.yaozh.com/member/' headers = { 'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.67 Safari/537.36' } # session 类 可以自动保存cookies === cookiesJar session = requests.session() # 1.代码登录 login_url = 'https://www.yaozh.com/login' login_form_data = { 'username':'xiaomaoera12', 'pwd': 'lina081012', 'formhash': '54AC1EE419', 'backurl': 'https%3A%2F%2Fwww.yaozh.com%2F', } login_response = session.post(login_url,data=login_form_data,headers=headers) print(login_response.content.decode()) # 2.登录成功之后 带着 有效的cookies 访问 请求目标数据 data = session.get(member_url,headers=headers).content.decode() ``` # SSL 证书验证 ``` import requests url = 'https://www.12306.cn/mormhweb/' headers = { 'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.67 Safari/537.36' } # 因为hhtps 是有第三方 CA 证书认证的 # 但是 12306 虽然是https 但是 它不是 CA证书, 他是自己 颁布的证书 # 解决方法 是: 告诉 web 忽略证书 访问 response = requests.get(url=url, headers=headers, verify=False) data = response.content.deco ``` # 客户端证书 你也可以指定一个本地证书用作客户端证书,可以是单个文件(包含密钥和证书)或一个包含两个文件路径的元组: ``` requests.get('https://kennethreitz.org', cert=('/path/client.cert', '/path/client.key')) <Response [200]> ``` 或者保持在会话中: ``` s = requests.Session() s.cert = '/path/client.cert' ``` 最后修改:2022 年 12 月 20 日 © 允许规范转载 打赏 赞赏作者 支付宝微信 赞 0 如果觉得我的文章对你有用,请随意赞赏