python常用模块之requests
一、requests
1、GET url带参数请求
>>> payload = {'key1': 'value1', 'key2': 'value2'} >>> r = requests.get("http://httpbin.org/get", params=payload)
2、定制请求头
如果你想为请求添加 HTTP 头部,只要简单地传递一个 dict
给 headers
参数就可以了。
例如,在前一个示例中我们没有指定 content-type:
>>> url = 'https://api.github.com/some/endpoint' >>> headers = {'user-agent': 'my-app/0.0.1'}>>> r = requests.get(url, headers=headers)
3、更加复杂的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"},... }
你还可以为 data
参数传入一个元组列表。在表单中多个元素使用同一 key 的时候,这种方式尤其有效:
>>> payload = (('key1', 'value1'), ('key1', 'value2')) >>> r = requests.post('http://httpbin.org/post', data=payload) >>> print(r.text) {..."form": {"key1": ["value1","value2"]},... }
很多时候你想要发送的数据并非编码为表单形式的。如果你传递一个 string
而不是一个 dict
,那么数据会被直接发布出去。
例如,Github API v3 接受编码为 JSON 的 POST/PATCH 数据:
>>> import json>>> url = 'https://api.github.com/some/endpoint' >>> payload = {'some': 'data'}>>> r = requests.post(url, data=json.dumps(payload))
>>> url = 'https://api.github.com/some/endpoint' >>> payload = {'some': 'data'}>>> r = requests.post(url, json=payload)
二、响应
1、相应内容
>>> import requests >>> r = requests.get('https://api.github.com/events') >>> r.text u'[{"repository":{"open_issues":0,"url":"https://github.com/...
Requests 会自动解码来自服务器的内容。大多数 unicode 字符集都能被无缝地解码。
你可以找出 Requests 使用了什么编码,并且能够使用r.encoding
属性来改变它:
>>> r.encoding 'utf-8' >>> r.encoding = 'ISO-8859-1'
2、二进制相应内容
你也能以字节的方式访问请求响应体,对于非文本请求:
>>> r.content b'[{"repository":{"open_issues":0,"url":"https://github.com/...
3、Json相应内容
Requests 中也有一个内置的 JSON 解码器,助你处理 JSON 数据:
>>> import requests>>> r = requests.get('https://api.github.com/events') >>> r.json() [{u'repository': {u'open_issues': 0, u'url': 'https://github.com/...
如果 JSON 解码失败, r.json()
就会抛出一个异常。例如,响应内容是 401 (Unauthorized),尝试访问 r.json()
将会抛出 ValueError: No JSON object could be decoded
异常。
需要注意的是,成功调用 r.json()
并不意味着响应的成功。有的服务器会在失败的响应中包含一个 JSON 对象(比如 HTTP 500 的错误细节)。这种 JSON 会被解码返回。要检查请求是否成功,请使用 r.raise_for_status()
或者检查 r.status_code
是否和你的期望相同。
4、响应状态码
我们可以检测响应状态码:
>>> r = requests.get('http://httpbin.org/get') >>> r.status_code 200
>>> r.status_code == requests.codes.ok True
5、响应头
我们可以查看以一个 Python 字典形式展示的服务器响应头
>>> r.headers {'content-encoding': 'gzip','transfer-encoding': 'chunked','connection': 'close','server': 'nginx/1.0.4','x-runtime': '148ms','etag': '"e1ca502697e5c9317743dc078f67693f"','content-type': 'application/json' }
三、cookie
如果某个响应中包含一些 cookie,你可以快速访问它们:
>>> url = 'http://example.com/some/cookie/setting/url' >>> r = requests.get(url)>>> r.cookies['example_cookie_name'] 'example_cookie_value'
要想发送你的cookies到服务器,可以使用 cookies
参数:
>>> url = 'http://httpbin.org/cookies' >>> cookies = dict(cookies_are='working')>>> r = requests.get(url, cookies=cookies) >>> r.text '{"cookies": {"cookies_are": "working"}}'
四、错误与异常
遇到网络问题(如:DNS 查询失败、拒绝连接等)时,Requests 会抛出一个 ConnectionError
异常。
如果 HTTP 请求返回了不成功的状态码, Response.raise_for_status()
会抛出一个 HTTPError
异常。
若请求超时,则抛出一个 Timeout
异常。
若请求超过了设定的最大重定向次数,则会抛出一个 TooManyRedirects
异常。
所有Requests显式抛出的异常都继承自 requests.exceptions.RequestException
转载于:https://www.cnblogs.com/jiahuifeng/p/10244741.html
python常用模块之requests相关推荐
- Python 常用模块大全
Python 常用模块大全(整理) OS 模块 #os模块就是对操作系统进行操作,使用该模块必须先导入模块: import os #getcwd() 获取当前工作目录(当前工作目录默认都是当前文件所在 ...
- 实战篇一 python常用模块和库介绍
# -_-@ coding: utf-8 -_-@ -- Python 常用模块和库介绍 第一部分:json模块介绍 import json 将一个Python数据结构转换为JSON: dict_ = ...
- python常用模块大全总结-常用python模块
广告关闭 2017年12月,云+社区对外发布,从最开始的技术博客到现在拥有多个社区产品.未来,我们一起乘风破浪,创造无限可能. python常用模块什么是模块? 常见的场景:一个模块就是一个包含了py ...
- 对于python来说、一个模块就是一个文件-python常用模块
python常用模块 什么是模块? 常见的场景:一个模块就是一个包含了python定义和声明的文件,文件名就是模块名字加上.py的后缀. 但其实import加载的模块分为四个通用类别: 1 使用pyt ...
- python常用模块之shelve模块
python常用模块之shelve模块 shelve模块是一个简单的k,v将内存中的数据通过文件持久化的模块,可以持久化任何pickle可支持的python数据类型 我们在上面讲json.pickle ...
- Python常用模块——目录
Python常用模块学习 Python模块和包 Python常用模块time & datetime &random 模块 Python常用模块os & sys & sh ...
- Python常用模块集锦
常用模块主要分为以下几类(缺失的后续再补充): 时间转换 时间计算 序列化和反序列化:json,pickle 编解码:unicode,base64 加解密:md5,sha1,hmac_sha1,aes ...
- Python+常用模块(2).md
Python 常用模块 1. random模块 1.1 导入模块 import random 1.2 random.random() 生成一个从0到1的随机浮点数 1.3 random.uniform ...
- python用什么来写模块-Python常用模块——模块介绍与导入
Python常用模块--模块介绍与导入 一.什么是模块? 在计算机程序的开发过程中,随着程序代码越写越多,在一个文件里代码就会越来越长,越来越不容易维护. 为了编写可维护的代码,我们把很多函数分组,分 ...
最新文章
- Mac系统的JDK8默认安装路径
- 触摸屏中文软件_八招轻松搞定西门子软件安装!
- MCU VR班會(06)記錄
- (软件工程复习核心重点)第五章详细设计-第三节:过程设计工具
- 【官方搭建入门】JEEWX 捷微开发环境搭建必读
- 数字图像处理 阈值分割 MATLAB实验
- python实时监控文件目录_c#教程之c#使用filesystemwatcher实时监控文件目录的
- [转]Mac OS X 下部分Android手机无法连接adb问题之解决方案
- 一道快手面试题,击败了100%用户
- 谈谈一些有趣的CSS题目(十一)-- reset.css 知多少?
- hibernate 批量插入数据
- Macbook变速播放视频
- 多商户Saas模式云进销存系统,源码分享
- PING用一生诠释了TCP/IP(4)------二三层转发为PING劈荆斩棘
- 从排序数组中删除重复项-Python-LeetCode
- Python_RuntimeError问题的解决
- iPad越狱失败 越狱恢复
- IAP15F2K61S2芯片引脚图
- SpringBoot中“Failed to configure a DataSource: ‘url‘ attribute is not specified and no embedded datas
- SQL Server 管理套件(SSMS)
热门文章
- GoF--服务定位器模式
- BZOJ3057 圣主的考验
- Silverlight 数据库 - Silverlight Database
- 【新书推荐】机器学习算法竞赛实战,Kaggle Grandmaster倾力打造,涵盖Kaggle、天池等赛题...
- 720P实时超分和强悍的恢复效果:全知视频超分OVSR
- android滑屏设计规范,安卓设计如何实现滑动屏幕出现如图的效果
- jsp为什么不加虚拟路径都能访问_JavaWeb学习笔记一(环境配置/jsp基本介绍)
- Python中的实用小技巧,可以省下不是事情,喜欢记得收下
- 最多开启多少个线程_中国到底有多少个海岛?全球海岛最多国家,我国排第几?...
- 图机器学习有多大神力?一文带你回顾2020,展望2021