1 - 安装和导入

pip install requests
import requests

2 - requsts的请求方法

requests.get('https://www.baidu.com/')       # GET请求:     请求获取url位置的资源
requests.post('https://www.baidu.com/') # POST请求: 请求向url位置的资源后附加新的数据
requests.put('https://www.baidu.com/') # PUT请求: 请求向url位置存储一个资源,覆盖该位置的原有资源
requests.delete('https://www.baidu.com/') # DELETE请求: 请求删除url位置存储的资源
requests.head('https://www.baidu.com/') # HEAD请求: 请求获取url位置的资源的头部信息
requests.patch('https://www.baidu.com/') # PATCH请求: 请求局部更新url位置的资源
requests.options('https://www.baidu.com/') # OPTIONS请求: 测试服务器是否真的接受请求数据
requests.request()                           # 构造一个请求,适用于以下的各种请求方法
requests.request(method,url,**kwargs)
# method:请求方式,对应get/put/post等7种
# url:拟获取页面的url链接
# **kwargs:控制访问的参数,共13个

3 - 为url传递参数

(1)get方法传参
url_params = {'key':'value'}
r = requests.get('your url',params = url_params) # 相当于your url?key=value

(2)post方法传参
使用data参数接受字典参数,request会自动将字典转换成json的请求体数据

4 - 请求的响应结果

r = requests.get('your url',params = url_params)
r.encoding # 获取当前的编码
r.encoding = 'utf-8' # 设置编码
r.apparent.encoding # 从内容中分析出的响应内容编码方式(备选编码方式)
r.status_code # 响应状态码
r.raw # 返回原始响应体,也就是 urllib 的 response 对象,使用 r.raw.read()
r.ok # 查看r.ok的布尔值便可以知道是否登陆成功
r.raise_for_status() # 失败请求(非200响应)抛出异常
r.text # 以encoding解析返回内容。字符串方式的响应体,会自动根据响应头部的字符编码进行解码
r.content # 以字节形式(二进制)返回。字节方式的响应体,会自动为你解码 gzip 和 deflate 压缩
r.headers # 以字典对象存储服务器响应头,但是这个字典比较特殊,字典键不区分大小写,若键不存在则返回None
r.json() # Requests中内置的JSON解码器,以json形式返回,前提返回的内容确保是json格式的,不然解析出错会抛异常

5 - post发送json请求

r = requests.post('https://api.github.com/some/endpoint', data=json.dumps({'some': 'data'}))
print(r.json())

6 - 定制头和cookie信息

header = {'user-agent': 'xxxxxxxxxxxxxxx'}
cookie = {'key':'value'}
r = requests.get/post('url',headers=header,cookies=cookie)
data = {'some': 'data'}
headers = {'content-type': 'application/json',
'User-Agent': 'Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:22.0) Gecko/20100101 Firefox/22.0'} r = requests.post('https://api.github.com/some/endpoint', data=data, headers=headers)
print(r.text)

7 - 超时

r = requests.get('url',timeout=1)           #设置秒数超时,仅对于连接有效

8 - 会话对象,能够跨请求保持某些参数

s = requests.Session()
s.auth = ('auth','passwd')
s.headers = {'key':'value'}
r = s.get('url')
r1 = s.get('url1')

9 - 代理

proxies = {'http':'ip1','https':'ip2' }
requests.get('url',proxies=proxies)
#设置访问代理
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/",
}

10 - 异常处理

import requests

URL = 'http://ip.taobao.com/service/getIpInfo.php'  # 淘宝IP地址库API
try:
r = requests.get(URL, params={'ip': '8.8.8.8'}, timeout=1)
r.raise_for_status() # 如果响应状态码不是 200,就主动抛出异常
except requests.RequestException as e:
print(e)
else:
result = r.json()
print(type(result), result, sep='\n')

11 - 上传文件

import requests

url = 'http://127.0.0.1:8080/upload'
files = {'file': open('/home/rxf/test.jpg', 'rb')}
#files = {'file': ('report.jpg', open('/home/lyb/sjzl.mpg', 'rb'))} #显式的设置文件名 r = requests.post(url, files=files)
print(r.text)
#request更加方便的是,可以把字符串当作文件进行上传:
import requests
url = 'http://127.0.0.1:8080/upload'
files = {'file': ('test.txt', b'Hello Requests.')} #必需显式的设置文件名 r = requests.post(url, files=files)
print(r.text)

12 - 身份验证

基本身份认证(HTTP Basic Auth)

import requests
from requests.auth import HTTPBasicAuth r = requests.get('https://httpbin.org/hidden-basic-auth/user/passwd', auth=HTTPBasicAuth('user', 'passwd'))
# r = requests.get('https://httpbin.org/hidden-basic-auth/user/passwd', auth=('user', 'passwd')) # 简写
print(r.json()) -----------------------------------------------------------------------
另一种非常流行的HTTP身份认证形式是摘要式身份认证,Requests对它的支持也是开箱即可用的:
requests.get(URL, auth=HTTPDigestAuth('user', 'pass')

13 - 示例

import requests

# '''requests模块抓取网页源码并保存到文件示例'''
html = requests.get("http://www.baidu.com")
with open('test.txt', 'w', encoding='utf-8') as f:
f.write(html.text)

最新文章

  1. appium for iOS config
  2. linux网络:常用命令(一)
  3. 20150604_Andriod 窗体PopupWindow动画
  4. Android 三种方式实现自定义圆形页面加载中效果的进度条
  5. 动态加载故事storyboard
  6. jquery 获取点击事件的id;jquery如何获取当前触发事件的控件ID值
  7. codeforces 633D - Fibonacci-ish 离散化 + 二分查询
  8. bluetooth-蓝牙事件监听
  9. oracle11g的dmp文件导入oracle10g当误差:头验证失败---解决
  10. Special Fish
  11. java —— equals 与 ==
  12. 题解——CF Manthan, Codefest 18 (rated, Div. 1 + Div. 2) T1(找规律)
  13. edram install
  14. How to install Redis 3.2 on CentOS 6 and 7
  15. Android动态的全屏和退出全屏
  16. 五大常见的MySQL高可用方案【转】
  17. Nginx 反向代理、后端检测模块
  18. 全球数据库-->基金/管理产品-->分类/行业平均
  19. 【bzoj3456】 城市规划
  20. 【51nod】1227 平均最小公倍数

热门文章

  1. phpmyadmin scripts/setup.php 反序列化漏洞(WooYun-2016-199433)
  2. Django < 2.0.8 任意URL跳转漏洞(CVE-2018-14574)
  3. 创建函数function
  4. 群晖NAS网络存储服务器防盗防小偷
  5. 痞子衡嵌入式:ARM Cortex-M内核那些事(9.1)- 存储保护(MPU - PMSAv6/7)
  6. Java面向对象10——方法重写
  7. .NET Core/.NET5/.NET6 开源项目汇总12:WPF组件库2
  8. HandlerInterceptor与WebRequestInterceptor的异同
  9. 计算机毕业设计项目-基于SSM的学生会管理系统-基于ssm的社团信息管理系统
  10. 零基础学Java之Java学习笔记(四):运算符