文档章节

Requests库简要介绍

曾劲松
 曾劲松
发布于 2016/10/31 12:17
字数 925
阅读 17
收藏 0

 Requests中文官方文档:http://cn.python-requests.org/zh_CN/latest/

其中,在ipython中利用自动补全看下调用requests之后返回的response对象的一些属性:

在ipython中利用自动补全看下调用requests之后返回的response对象的一些属性:

In [1]: import requests
In [2]: r = requests.get('https://api.github.com')
In [3]: r.
r.apparent_encoding  r.history            r.raw
r.close              r.is_redirect        r.reason
r.connection         r.iter_content       r.request
r.content            r.iter_lines         r.status_code
r.cookies            r.json               r.text
r.elapsed            r.links              r.url
r.encoding           r.ok                 
r.headers            r.raise_for_status 


r.encoding是直接从响应头部信息Content-Type里获取页面编码, 而r.apparent_encoding是利用chardet检测r.content的编码得到的值.
r.content是响应内容的字节流(bytes),而r.text是将响应内容以r.encoding解码后得到的unicode对象.
r.raw可获得原始套接字响应,但必须在发出请求时设置stream=True,之后可使用read()方法读取.
requests的get()和post()请求可以接受params={}, data={}, headers={}, cookies={}, proxies={}, auth=(),等等一系列参数.

 其他用法:

import requests  
import json  
  
#发送POST请求  
#r = requests.post("http://httpbin.org/post")  
  
#发送其他类型请求  
#r = requests.put("http://httpbin.org/put")  
#r = requests.delete("http://httpbin.org/delete")  
#r = requests.head("http://httpbin.org/get")  
#r = requests.options("http://httpbin.org/get")  
  
#传递参数的GET请求  
#payload = {'key1': 'value1', 'key2': 'value2'}  
#r = requests.get("http://httpbin.org/get", params=payload)  
#print(r.url)  
  
#查看相应内容,会自动解码  
#print(r.text)  

其他响应项:
r.status_code #响应状态码
r.raw #返回原始响应体,也就是 urllib 的 response 对象,使用 r.raw.read() 读取
r.content #字节方式的响应体,会自动为你解码 gzip 和 deflate 压缩
r.text #字符串方式的响应体,会自动根据响应头部的字符编码进行解码
r.headers #以字典对象存储服务器响应头,但是这个字典比较特殊,字典键不区分大小写,若键不存在则返回None
#*特殊方法*#
r.json() #Requests中内置的JSON解码器
r.raise_for_status() #失败请求(非200响应)抛出异常

#查看,指定URL编码  
#print(r.encoding)  
#r.encoding = 'ISO-8859-1'  
  
#以字节方式访问相应,会自动解码gzip和deflate压缩的数据  
#print(r.content)  
  
#创建图片  
#from PIL import Image  
#from io import StringIO  
#i= Image.open(StringIO.StringIO(r.content))  
  
#处理JSON数据  
#import requests  
#r=requests.get('https://github.com/timeline.json')  
#print(r.json())  
  
#返回原始相应内容  
##>>> r = requests.get('https://github.com/timeline.json', stream=True)  
##>>> r.raw  
##<requests.packages.urllib3.response.HTTPResponse object at 0x101194810>  
##>>> r.raw.read(10)  
##'\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\x03'  
  
#保存文本,针对返回原始内容byte  
##with open(filename, 'wb') as fd:  
##    for chunk in r.iter_content(chunk_size):  
##        fd.write(chunk)  
  
#添加头部  
##>>> import json  
##>>> url = 'https://api.github.com/some/endpoint'  
##>>> payload = {'some': 'data'}  
##>>> headers = {'content-type': 'application/json'}  
##  
##>>> r = requests.post(url, data=json.dumps(payload), headers=headers)  
  
#账号密码登陆  
#r = requests.get('https://api.github.com/user', auth=('user', 'pass'))  
  
#发送表单数据  
##paylaod={"key1":"value1","key2":"value2"}  
##r=requests.post("http://httpbin.org/post",data=paylaod)  
##print(r.text)  
  
#发送string数据  
##import json  
##payload={"key1":"value1","key2":"value2"}  
##r=requests.post("http://httpbin.org/post",data=json.dumps(payload))  
##print(r.text)  
  
#发送文件  
##url='http://httpbin.org/post'  
##files={'file':open('report.xls','rb')}  
#显式设置文件名,文件类型,请求头:  
##files={'file': ('report.xls', open('report.xls', 'rb'), 'application/vnd.ms-excel', {'Expires': '0'})}  
#发送文件形式的字符串  
##files={'file': ('report.csv', 'some,data,to,send\nanother,row,to,send\n')}  
##r=requests.post(url,files=files)  
##print(r.text)  
  
#检测响应码  
##r=requests.get('http://httpbin.org/get')  
##print(r.status_code)  
##print(r.status_code==requests.codes.ok)  
##bad_r = requests.get('http://httpbin.org/status/404')  
##print(bad_r.status_code)  
##bad_r.raise_for_status()  
  
#响应头  
##r=requests.get('http://httpbin.org/get')  
##print(r.headers)  
##print(r.headers['date'])  
  
#cookies  
##url='http://example.com/some/cookie/setting/url'  
##r=requests.get(url)  
##print(r.cookies['example_cookie_name'])  #报错  
  
#发送cookies  
##url = 'http://httpbin.org/cookies'  
##cookies = dict(cookies_are='working')  
##r = requests.get(url, cookies=cookies)  
##print(r.text)  
  
#重定向  
##r=requests.get('http://github.com')  
##print(r.url)  
##print(r.history)  
  
#超时处理  
##requests.get('http://github.com',timeout=1)  
  
#跨请求保存cookies  
##s = requests.Session()  
##s.get('http://httpbin.org/cookies/set/sessioncookie/123456789')  
##r = s.get("http://httpbin.org/cookies")  
##print(r.text)  
  
#请求保存缺省数据  
##s = requests.Session()  
##s.auth = ('user', 'pass')  
##s.headers.update({'x-test': 'true'})  
### both 'x-test' and 'x-test2' are sent  
##r=s.get('http://httpbin.org/headers', headers={'x-test2': 'true'})  
##print(r.text)  
  
#简单获取请求头部和返回头部  
##url='http://www.baidu.com/'  
##r=requests.get(url)  
#返回头部  
##print(r.headers)  
#请求头部  
##print(r.request.headers)  
  
#设置SSL证书  
#requests.get('https://kennethreitz.com', cert=('/path/server.crt', '/path/key'))  

 

© 著作权归作者所有

曾劲松
粉丝 5
博文 200
码字总数 141434
作品 0
武汉
私信 提问
python的requests库和urllib包对比

python中有多种库可以用来处理http请求,比如python的原生库:urllib包、requests类库。urllib和urllib2是相互独立的模块,python3.0以上把urllib和urllib2合并成一个库了,requests库使用了...

yzy121403725
2018/07/04
0
0
预处理太慢,Facebook 现在直接 JIT C++ 代码

Facebook 正在进行 C++ 代码即时编译,将其视为运行快速的脚本语言。 引用 phoronix 网站的消息,Facebook 工程师在本月的布鲁塞尔 EuroLLVM 会议上简要介绍了这项工作。 多年来,Facebook ...

h4cd
05/03
4.7K
9
php 图片上传 500 Internal Server Error 错误

写php简单上传图片时,发现200k的图片上传时报Internal Server Error错误,检查了 uploadmaxfilesize,及其他postmaxsize、maxinputtime、memorylimit、 maxexecutiontime配置项均没有问题,...

暝冥佷愛伱
2015/07/09
642
0
Python网络爬虫-你的第一个爬虫(requests库)

0.采用requests库 虽然urllib库应用也很广泛,而且作为Python自带的库无需安装,但是大部分的现在python爬虫都应用requests库来处理复杂的http请求。requests库语法上简洁明了,使用上简单易...

糖宝lsh
01/11
91
0
requests+lxml爬虫利器

requests 1.requests是一个强大的Python第三方Http库,基于httplib和urllib3,接口清晰易用,功能十分强大。 ###1. 安装 pip install requests或者easy_install requests ###2. 基本使用 在i...

曾劲松
2016/10/04
230
0

没有更多内容

加载失败,请刷新页面

加载更多

VMware vSphere ESXi主机的访问控制

在vShpere中,访问ESXi主机的途径很多,如下: ESXi DCUI ESXi Shell ESXi SSH ESXi Host Client vCenter --> vSphere web client / vSphere Client VMware vSphere ESXi主机的访问控制,除了......

大别阿郎
34分钟前
4
0
大神讲解CGI、FastCGI和PHP-FPM关系图解

参考资料 概念了解:CGI,FastCGI,PHP-CGI与PHP-FPM:http://www.nowamagic.net/librarys/veda/detail/1319 php中fastcgi和php-fpm是什么东西:https://www.zybuluo.com/phper/note/50231 ......

网络小虾米
43分钟前
4
0
《DNS攻击防范科普系列3》 -如何保障 DNS 操作安全

引言 前两讲我们介绍了 DNS 相关的攻击类型,以及针对 DDoS 攻击的防范措施。这些都是更底层的知识,有同学就来问能否讲讲和我们的日常操作相关的知识点,今天我们就来说说和我们日常 DNS 操...

Mr_zebra
44分钟前
4
0
zk中ServerCnxn

实现接口Stats, Watcher 内部类 DisconnectReason CloseRequestException EndOfStreamException(流关闭) 属性 方法 getSessionTimeout 获取session失效时间 sendResponse 发送回复数据 se......

writeademo
49分钟前
4
0
如何将 Redis 用于微服务通信的事件存储

来源:Redislabs 作者:Martin Forstner 翻译:Kevin (公众号:中间件小哥) 以我的经验,将某些应用拆分成更小的、松耦合的、可协同工作的独立逻辑业务服务会更易于构建和维护。这些服务(也...

中间件小哥
52分钟前
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部