---恢复内容开始---

Request的五种请求方式

方法

说明

requests.request()

构造一个请求,支撑以下各方法的基础方法

requests.get()

获取HTML网页的主要方法,对应于HTTP的GET

requests.head()

获取HTML网页头信息的方法,对应于HTTP的HEAD

request.post()

向HTML网页提交POST请求的方法,对应于HTTP的POST

request.put()

向HTML网页提交PUT请求的方法,对应于HTTP的PUT

request.patch()

向HTML网页提交局部修改请求,对应于HTTP的PATCH

request.delete()

向HTML页面提交删除请求,对应于HTTP的DELETE

 

一:request.get():

源码:

 def get(url, params=None, **kwargs):
r"""Sends a GET request. :param url: URL for the new :class:`Request` object.
:param params: (optional) Dictionary, list of tuples or bytes to send
in the body of the :class:`Request`.
:param \*\*kwargs: Optional arguments that ``request`` takes.
:return: :class:`Response <Response>` object
:rtype: requests.Response
""" kwargs.setdefault('allow_redirects', True)
return request('get', url, params=params, **kwargs)

requst.get()源码

参数解析及使用

 import requests
r=requests.request('post','http://www.oldboyedu.com',params={'k1':'python'})
print(r.url)
#https://www.oldboyedu.com/?k1=python

get参数使用

response对象的属性

属性 说明
r.status_code HTTP请求的返回状态,200表示连接成功,404表示失败
r.text HTTP响应内容的字符串形式,即,url对应的页面内容
r.encoding 从HTTP header中猜测的响应内容编码方式
r.apparent_encoding 从内容分析出的响应内容编码方式(备选编码方式)
r.content HTTP响应内容的二进制形式
r.json 返回json数据
r.request 返回请求方式
r.headers 返回请求头
r.cookies   返回cookie

理解Response的编码

属性 说明
r.encoding 从HTTP header中猜测的响应内容编码方式
r.apparent_encoding 从内容中分析出的响应内容编码方式(备选编码方式)

r.encoding:如果header中不存在charset,则认为编码为ISO-8859-1
r.apparent_encoding:根据网页内容分析出的编码方式。

理解Requests库的异常

异常 说明
requests.ConnectionError 网络连接错误异常,如DNS查询失败、拒绝连接等
requests.HTTPError HTTP错误异常
requests.URLRequired URL缺失异常
requests.TooMangRedirects 超过最大重定向次数,产生重定向异常
requests.ConnectTimeout 连接远程服务器超时异常
requests.Timeout 请求URL超时,产生超时异常
r.raise_for_status() 如果不是200,产生异常requests.HTTPError

更多参数

     :param method: method for the new :class:`Request` object.
:param url: URL for the new :class:`Request` object.
:param params: (optional) Dictionary, list of tuples or bytes to send
in the body of the :class:`Request`.
:param data: (optional) Dictionary, list of tuples, bytes, or file-like
object to send in the body of the :class:`Request`.
:param json: (optional) A JSON serializable Python object to send in the body of the :class:`Request`.
:param headers: (optional) Dictionary of HTTP Headers to send with the :class:`Request`.
:param cookies: (optional) Dict or CookieJar object to send with the :class:`Request`.
:param files: (optional) Dictionary of ``'name': file-like-objects`` (or ``{'name': file-tuple}``) for multipart encoding upload.
``file-tuple`` can be a -tuple ``('filename', fileobj)``, -tuple ``('filename', fileobj, 'content_type')``
or a -tuple ``('filename', fileobj, 'content_type', custom_headers)``, where ``'content-type'`` is a string
defining the content type of the given file and ``custom_headers`` a dict-like object containing additional headers
to add for the file.
:param auth: (optional) Auth tuple to enable Basic/Digest/Custom HTTP Auth.
:param timeout: (optional) How many seconds to wait for the server to send data
before giving up, as a float, or a :ref:`(connect timeout, read
timeout) <timeouts>` tuple.
:type timeout: float or tuple
:param allow_redirects: (optional) Boolean. Enable/disable GET/OPTIONS/POST/PUT/PATCH/DELETE/HEAD redirection. Defaults to ``True``.
:type allow_redirects: bool
:param proxies: (optional) Dictionary mapping protocol to the URL of the proxy.
:param verify: (optional) Either a boolean, in which case it controls whether we verify
the server's TLS certificate, or a string, in which case it must be a path
to a CA bundle to use. Defaults to ``True``.
:param stream: (optional) if ``False``, the response content will be immediately downloaded.
:param cert: (optional) if String, path to ssl client cert file (.pem). If Tuple, ('cert', 'key') pair.

request.request()的参数

参数运用

  • params
      # - 可以是字典
# - 可以是字符串
# - 可以是字节(ascii编码以内) # requests.request(method='get',
# url='http://127.0.0.1:8000/test/',
# params={'k1': 'v1', 'k2': '水电费'}) # requests.request(method='get',
# url='http://127.0.0.1:8000/test/',
# params="k1=v1&k2=水电费&k3=v3&k3=vv3") # requests.request(method='get',
# url='http://127.0.0.1:8000/test/',
# params=bytes("k1=v1&k2=k2&k3=v3&k3=vv3", encoding='utf8'))

params参数

  • json
     # 将json中对应的数据进行序列化成一个字符串,json.dumps(...)
# 然后发送到服务器端的body中,并且Content-Type是 {'Content-Type': 'application/json'}

json参数

  • headers
     # 发送请求头到服务器端
requests.request(method='POST',
url='http://127.0.0.1:8000/test/',
json={'k1': 'v1', 'k2': '水电费'},
headers={'Content-Type': 'application/x-www-form-urlencoded'}
)

header参数

  • cookies
     # 发送Cookie到服务器端
requests.request(method='POST',
url='http://127.0.0.1:8000/test/',
data={'k1': 'v1', 'k2': 'v2'},
cookies={'cook1': 'value1'},
)

cookies

  • files
     # 发送文件
# file_dict = {
# 'f1': open('readme', 'rb')
# }
# requests.request(method='POST',
# url='http://127.0.0.1:8000/test/',
# files=file_dict) # 发送文件,定制文件名
# file_dict = {
# 'f1': ('test.txt', open('readme', 'rb'))
# }
# requests.request(method='POST',
# url='http://127.0.0.1:8000/test/',
# files=file_dict) # 发送文件,定制文件名
# file_dict = {
# 'f1': ('test.txt', "hahsfaksfa9kasdjflaksdjf")
# }
# requests.request(method='POST',
# url='http://127.0.0.1:8000/test/',
# files=file_dict) # 发送文件,定制文件名
# file_dict = {
# 'f1': ('test.txt', "hahsfaksfa9kasdjflaksdjf", 'application/text', {'k1': ''})
# }
# requests.request(method='POST',
# url='http://127.0.0.1:8000/test/',
# files=file_dict)

files

  • auth
     from requests.auth import HTTPBasicAuth, HTTPDigestAuth

     ret = requests.get('https://api.github.com/user', auth=HTTPBasicAuth('wupeiqi', 'sdfasdfasdf'))
print(ret.text) # ret = requests.get('http://192.168.1.1',
# auth=HTTPBasicAuth('admin', 'admin'))
# ret.encoding = 'gbk'
# print(ret.text) # ret = requests.get('http://httpbin.org/digest-auth/auth/user/pass', auth=HTTPDigestAuth('user', 'pass'))
# print(ret)
#

auth参数

  • timeout
     # ret = requests.get('http://google.com/', timeout=)
# print(ret) # ret = requests.get('http://google.com/', timeout=(, ))
# print(ret)
pass
第一个时间为链接时间,第二个时间为服务器发送第一个数据的时间

tineout

  • allow-redirects:是否允许重定向
     # ret = requests.get('http://google.com/', timeout=)
# print(ret) # ret = requests.get('http://google.com/', timeout=(, ))
# print(ret)
pass

allow_redirects

  • proxies:设置代理
     # proxies = {
# "http": "61.172.249.96:80",
# "https": "http://61.185.219.126:3128",
# } # proxies = {'http://10.20.1.128': 'http://10.10.1.10:5323'} # ret = requests.get("http://www.proxy360.cn/Proxy", proxies=proxies)
# print(ret.headers) # from requests.auth import HTTPProxyAuth
#
# proxyDict = {
# 'http': '77.75.105.165',
# 'https': '77.75.105.165'
# }
# auth = HTTPProxyAuth('username', 'mypassword')
#
# r = requests.get("http://www.google.com", proxies=proxyDict, auth=auth)
# print(r.text)

proxies

  • stream:相当于下一点保存一点
     ret = requests.get('http://127.0.0.1:8000/test/', stream=True)
print(ret.content)
ret.close() # from contextlib import closing
# with closing(requests.get('http://httpbin.org/get', stream=True)) as r:
# # 在此处理响应。
# for i in r.iter_content():
# print(i)

stream

  • verify:指定是否进行https认证

requests.get('https://kennethreitz.org',verify=False)

  • cert是保存本地ssl证书路径的字段

requests.get('https://kennethreitz.org',cert=('/path/client.cert','/path/client.key'))

其中data参数中的数据型类型只能是字符串,列表,数字,文件,不可以再数据里提交字典

json参数中的数据类型可以试字符串,列表,数字,还有字典,可序列化对象

requests库的session对象能够帮我们跨请求保持某些参数,也会在同一个session实例发出的所有请求之间保持cookies

参考:

链接:https://www.jianshu.com/p/d78982126318

最新文章

  1. Join 和 apply 用法
  2. for循环或Repeat里面对某个字段进行复杂处理的解决方案
  3. leetcode:1-5题代码整理
  4. app上传到App Store的快捷方法及步骤
  5. Netbeans 8.0.2 For PHP继续坑
  6. openjudge ROADS
  7. 【排列组合】bzoj3505 [Cqoi2014]数三角形
  8. ASP.NET MVC 使用Echarts
  9. [转]机器学习——C4.5 决策树算法学习
  10. shell基础——二元比较操作符
  11. js淡入淡出
  12. github 自学文档 希望可以给初学的人一些帮助
  13. 在windows端和linux端安装Git
  14. Linux中的端口占用问题
  15. 【转】简单了介绍js中的一些概念(词法结构) 和 数据类型(部分)。
  16. php redis 处理websocket聊天记录
  17. scikit-learn中机器学习模型比较(逻辑回归与KNN)
  18. 利用map和reduce编写一个str2float函数,把字符串&#39;123.456&#39;转换成浮点数123.456:
  19. jdbc,mysql 数据库BLOB返回值 [B 的问题
  20. SQL记录-解锁和dbms_job操作

热门文章

  1. Codeforces Round #543
  2. jQuery与原生JS相互转化
  3. POJ2960 S-Nim 【博弈论】
  4. VSCode的Markdown All in One插件,列表选项卡只有3个空格的解决方案
  5. elasticsearch中head插件中的定制增加用户名密码范例
  6. 03-oracle中的高级查询
  7. 享元模式-Flyweight(Java实现)
  8. day16,模块 , 用户管理系统 , 购物车程序 , 分页显示.
  9. 一次多个数据库tnsping及登录单点登录需求
  10. 面试经验合集-Web前端&lt;一&gt;