博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Requests模块
阅读量:6290 次
发布时间:2019-06-22

本文共 3228 字,大约阅读时间需要 10 分钟。

参考文档:http://docs.python-requests.org/en/latest/user/quickstart/ PS:纯手打翻译

  在自动化运维中涉及到数据发送的问题,发送的数据JSON序列化才能向服务器端发送完整的数据。为了解决这个问题需要对requests模块进行了解和认识。

  导入request模块

import requests

  现在有了一个Response响应对象r,我们可以从这个对象中获取我们需要的信息

r = requests.get('https://api.github.com/events')

  Requests提供的简单的API意味着HTTP的各种请求形式都是显而易见的。例如下面是如何创建一个HTTP POST请求

r = requests.post('http://httpbin.org/post', data = {'key':'value'})

  下面是HTTP请求的各种形式:

r = requests.put('http://httpbin.org/put', data = {'key':'value'}) r = requests.delete('http://httpbin.org/delete') r = requests.head('http://httpbin.org/get') r = requests.options('http://httpbin.org/get')

  URLs中的规范

  如果你想向指定URL发送数据,这些数据形式必须是以键值对的形式发送。Requests模块允许以键值对形式的字符串发送参数,并且你需要使用关键字params

>>> payload = {'key1': 'value1', 'key2': 'value2'}>>> r = requests.get('http://httpbin.org/get', params=payload)

  你可以这样查看对象r的URL

>>> print(r.url)http://httpbin.org/get?key2=value2&key1=value1

  响应内容

>>> import requests>>> r = requests.get('https://api.github.com/events')>>> r.textu'[{"repository":{"open_issues":0,"url":"https://github.com/...

  Requests模块会自动将从服务器获取的数据进行解码。大多数字符集会以unicode的形式无缝解码

  当你创建一个请求,Requests模块会基于HTTP头对响应进行编码。使用r.text可以查看编码文本内容。r.encoding查看编码,并且可以改变编码格式

>>> r.encoding'utf-8'>>> r.encoding = 'ISO-8859-1'

  JSON响应内容

Requsts模块有内置的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()会抛出异常。例如如果响应204,或者如果响应包括无效的JSON,r.json()抛出ValueError:NO JSON object could be decoded

  较为复杂的POST请求

  如果你想以某种编码形式编码数据,比如HTML form。你只需要传递一个字典给data参数,你的字典会自动被以form形式编码

>>> payload = {'key1': 'value1', 'key2': 'value2'}>>> r = requests.post("http://httpbin.org/post", data=payload)>>> print(r.text){  ...  "form": {    "key2": "value2",    "key1": "value1"  },  ...}

  你可以传递一组元祖给data参数,当form有多个元素并且拥有相同的键时

>>> payload = (('key1', 'value1'), ('key1', 'value2'))>>> r = requests.post('http://httpbin.org/post', data=payload)>>> print(r.text){  ...  "form": {    "key1": [      "value1",      "value2"    ]  },  ...}

  如果你发送的数据不是form编码。你需要传递一个字符串而不是一个字典

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

  不使用字典形式,你可以直接传递数据给json参数

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

  POST一个文件

>>> url = 'http://httpbin.org/post'>>> files = {'file': open('report.xls', 'rb')}>>> r = requests.post(url, files=files)>>> r.text{  ...  "files": {    "file": "
" }, ...}

  你可以设置文件名,content_type和headers

>>> url = 'http://httpbin.org/post'>>> files = {'file': ('report.xls', open('report.xls', 'rb'), 'application/vnd.ms-excel', {'Expires': '0'})}>>> r = requests.post(url, files=files)>>> r.text{  ...  "files": {    "file": "
" }, ...}

  你可以发送字符串让服务器以文件的形式获取

>>> url = 'http://httpbin.org/post'>>> files = {'file': ('report.csv', 'some,data,to,send\nanother,row,to,send\n')}>>> r = requests.post(url, files=files)>>> r.text{  ...  "files": {    "file": "some,data,to,send\\nanother,row,to,send\\n"  },  ...}

  

 

转载于:https://www.cnblogs.com/c491873412/p/7620234.html

你可能感兴趣的文章
数据结构实践——顺序表应用
查看>>
python2.7 之centos7 安装 pip, Scrapy
查看>>
机智云开源框架初始化顺序
查看>>
Spark修炼之道(进阶篇)——Spark入门到精通:第五节 Spark编程模型(二)
查看>>
一线架构师实践指南:云时代下双活零切换的七大关键点
查看>>
ART世界探险(19) - 优化编译器的编译流程
查看>>
玩转Edas应用部署
查看>>
music-音符与常用记号
查看>>
sql操作命令
查看>>
zip 数据压缩
查看>>
Python爬虫学习系列教程
查看>>
【数据库优化专题】MySQL视图优化(二)
查看>>
【转载】每个程序员都应该学习使用Python或Ruby
查看>>
PHP高级编程之守护进程,实现优雅重启
查看>>
PHP字符编码转换类3
查看>>
rsync同步服务配置手记
查看>>
http缓存知识
查看>>
Go 时间交并集小工具
查看>>
iOS 多线程总结
查看>>
webpack是如何实现前端模块化的
查看>>