【python】requests模块初探(一)

一、写在前面



Requests 是用Python语言编写,基于 urllib,采用 Apache2 Licensed 开源协议的 HTTP 库。它比 urllib 更加方便,可以节约我们大量的工作,完全满足 HTTP 测试需求。Requests 的哲学是以 PEP 20 的习语为中心开发的,所以它比 urllib 更加 Pythoner。

那么,requests都有哪些应用场景呢?

1.服务器编程基础;

2.爬虫利器;

3.自动化接口测试;

4.运维监控脚本

等等

本篇,我就记录一下requests最常用的两个请求方式和以及响应,其他内容后续更新


二、安装

安装很简单,只需要使用命令行安装即可:

pip install requests

三、请求

3.1 GET请求

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

3.2 传递URL参数的GET请求

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

3.3 请求cookies

url = 'http://httpbin.org/cookies'
cookies = dict(cookies_are='working')
r = requests.get(url, cookies=cookies)
#后面用到再详细分析

3.4 POST请求

通常,想要发送一些编码为表单形式的数据——非常像一个 HTML 表单。要实现这个,只需简单地传递一个字典给 data 参数。你的数据字典在发出请求时会自动编码为表单形式:

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

还可以为 data 参数传入一个元组列表。在表单中多个元素使用同一 key 的时候,这种方式尤其有效:

payload = (('key1', 'value1'), ('key1', 'value2'))
r = requests.post('http://httpbin.org/post', data=payload)

很多时候你想要发送的数据并非编码为表单形式的,例如你要传递一个 string 而不是一个 dict:

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

或者是定义一个字符串的data

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

此处除了可以自行对 dict 进行编码,你还可以使用 json 参数直接传递,然后它就会被自动编码

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

四、请求头

如果想为请求添加 HTTP 头部,只要简单地传递一个 dict 给 headers 参数就可以了。

url = 'https://api.github.com/some/endpoint'
headers = {'user-agent': 'my-app/0.0.1'}
r = requests.get(url, headers=headers)

五、响应

前面的请求例子中,每个请求都会赋值给一个名为 r 的 Response 对象,我们可以从这个对象中获取所有我们想要的信息

5.1获得请求url

payload = {'key1': 'value1', 'key2': ['value2', 'value3']}
r = requests.get('http://httpbin.org/get', params=payload)
print(r.url)
>>> http://httpbin.org/get?key1=value1&key2=value2&key2=value3

5.2获得响应内容

r = requests.get('https://api.github.com/events')
r.text #获得响应内容,类型为字符串
r.json() #如果 JSON 解码失败, r.json() 就会抛出一个异常
r.content #获得响应内容,类型为bytes-二进制响应内容
r.raw #原始响应内容,在罕见的情况下,你可能想获取来自服务器的原始套接字响应(后面会详细结合流数据来分析)

5.3响应状态码

r = requests.get('http://httpbin.org/get')
r.status_code

如果发送了一个错误请求(一个 4XX 客户端错误,或者 5XX 服务器错误响应),我们可以通过 Response.raise_for_status() 来抛出异常:

r = requests.get('http://httpbin.org/status/404')
r.status_code
>>> 404
r.raise_for_status()
>>>
Traceback (most recent call last):
  File "requests/models.py", line 832, in raise_for_status
    raise http_error
requests.exceptions.HTTPError: 404 Client Error

5.4响应头

r.headers

5.5 Response对象支持的所有方法

r.xxx #在ipython调试中,可以通过tab键来查看所有方法

该对象所有方法如下:

apparent_encoding
content
encoding
is_permanent_redirect
iter_lines
next
raw
status_code
close
cookies
headers
is_redirect
json
ok
reason
text
connection
elapsed
history
iter_content
links
raise_for_status
request
url

这里仅介绍了几个很常用的响应方法,后面遇到实际问题再展开讨论

六、超时

可以告诉 requests 在经过以 timeout 参数设定的秒数时间之后停止等待响应。基本上所有的生产代码都应该使用这一参数。如果不使用,你的程序可能会永远失去响应:

requests.get('http://github.com', timeout=0.001)

后记

以上的两种关于requests库请求方式及响应方法应该可以处理一些基本问题了,后面会继续探索requests库的其他功能。

原文地址:https://www.cnblogs.com/flowertester/p/11581892.html

时间: 2024-10-12 04:25:35

【python】requests模块初探(一)的相关文章

python requests 模块初探

现在经常需要在网页中获取相关内容. 其中无非获取网页返回状态,以及查看网页获取的内容几个方面,那么在这方面来看requests可能比urllib2库更简便一些. 比如:先用方法获取网页 r = requests.get("http://www.baidu.com") #查看返回码 r.status_code #查看获取的网页内容 r.text #如果网页返回的是一个json串,也可以比较方便获取 kk = r.json() print kk #查看网页的编码格式 r.encoding

Python requests模块学习笔记

1.Requests模块说明 Requests 是使用 Apache2 Licensed 许可证的 HTTP 库.用 Python 编写,真正的为人类着想. Python 标准库中的 urllib2 模块提供了你所需要的大多数 HTTP 功能,但是它的 API 太渣了.它是为另一个时代.另一个互联网所创建的.它需要巨量的工作,甚至包括各种方法覆盖,来完成最简单的任务. 在Python的世界里,事情不应该这么麻烦. Requests 使用的是 urllib3,因此继承了它的所有特性.Request

python requests模块详解

requests是python的一个HTTP客户端库,跟urllib,urllib2类似,那为什么要用requests而不用urllib2呢?官方文档中是这样说明的: python的标准库urllib2提供了大部分需要的HTTP功能,但是API太逆天了,一个简单的功能就需要一大堆代码. 我也看了下requests的文档,确实很简单,适合我这种懒人.下面就是一些简单指南. 插播个好消息!刚看到requests有了中文翻译版,建议英文不好的看看,内容也比我的博客好多了,具体链接是:http://cn

Python requests模块学习

import requests 下面就可以使用神奇的requests模块了! 1.向网页发送数据 >>> payload = {'key1': 'value1', 'key2': ['value2', 'value3']} >>> r = requests.get('http://httpbin.org/get', params=payload) >>> print(r.url) http://httpbin.org/get?key1=value1&a

python:requests模块

requests模块是我在学习爬虫时学到的一个模块,它的api比较简单好用,这里简介下使用方法. 其实这个很好使用,几行代码就可以获取一个网页的内容: import requests url = 'http://www.juzimi.com/ju/252304' response = requests.get(url) print (response.text) 它支持很多http请求类型:get,post,put,delete,head,options 其中获取的响应内容有2中显示方法 .co

python requests模块session的使用建议及整个会话中的所有cookie的方法

话不多说,直接上代码 测试代码 服务端 下面是用flask做的一个服务端,用来设置cookie以及打印请求时的请求头 # -*- coding: utf-8 -*- from flask import Flask, make_response, request app = Flask(__name__) @app.route('/a1') def a1(): print(request.headers) rp = make_response() rp.set_cookie('a1', '123'

Python Requests模块讲解4

高级用法 会话对象 请求与响应对象 Prepared Requests SSL证书验证 响应体内容工作流 保持活动状态(持久连接) 流式上传 块编码请求 POST Multiple Multipart-Encoded Files 事件挂钩 自定义身份验证 流式请求 代理 合规性 编码方式 HTTP动词 响应头链接字段 Transport Adapters Example: Specific SSL Version Blocking Or Non-Blocking? Timeouts CA Cer

python requests 模块

requests 是第三方 python 库,用于处理 url 资源 requests 项目官网:http://www.python-requests.org/en/master/ 安装方式:pip install requests 如果遇到权限问题,使用管理员账户运行 cmd 原文地址:https://www.cnblogs.com/0820LL/p/10333797.html

python Requests模块的使用简介

Requests的安装: pip install Requests Requests的使用: import requests url = "http://www.mzitu.com" response = requests.get(url) # 获得请求 response.encoding = "utf-8" # 改变其编码 html = response.text # 获得网页内容 binary__content = response.content # 获得二进