Python requests学习笔记

Requests 库的基本用法

1 基本发送GET请求

import requests

# 使用 get 方式请求
response = requests.get('https://tieba.baidu.com/')
print(response.text)

2 发送GET带参数,对变量params传入字典类型即可

import requests

url = 'http://httpbin.org/get'
payload = {'name': 'Numb', 'author': 'Linkin Park'}

response = requests.get(url, params=payload)
print(response.url)
print(response.text)

2.1 params 同时支持传入列表,达到一个变量赋两个值的效果

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

3 发送Post请求,使用data参数传输数据

3.1 直接传输字典类型到data参数,会自动编码为表单形式发送

import requests

url = 'http://httpbin.org/post'
data = {
'user': 'abc123',
'pass': 'admin'
}
response = requests.post(url, data=data)
print(response.text)

3.2 通过json参数传递json数据到服务器,Requests库会自动编码,这是新特性,如果还是依靠data参数传递json数据,则需要使用json模块进行数据编码再传递给data参数,复杂了一点,不推荐了吧

url = 'https://api.github.com/some/endpoint'
payload = {'some': 'data'}
r = requests.post(url, json=payload)##传递json数据给json参数

4 Request库发送get或者post请求后会得到一个response对象,这个对象包含了很多有用的属性

import requests

url = "http://httpbin.org/post"

data = {'user':'abc123','passwd':'admin123'}

r = request.post(url,data=data)

print(r.text) # 返回请求的文本字符串
print(r.headers) # 返回请求头
print(r.cookies) # 返回cookies
print(r.status_code) # 返回请求的状态码

5 Session机制:requests库如何保持session,详细参考下面的官方代码示例

s = requests.Session() # 生成一个session对象

s.get('http://httpbin.org/cookies/set/sessioncookie/123456789') # 有示例网站取得sessioncookie

r = s.get("http://httpbin.org/cookies") # 再次发送请求到示例网站,示例网站会返回你的cookie

print(r.text) #由此回复证明第二次请求也带上了sessioncookie

# 输出:'{"cookies": {"sessioncookie": "123456789"}}'

不过需要注意,就算使用了会话,方法级别的参数也不会被跨请求保持。下面的例子只会和第一个请求发送 cookie ,而非第二个:

s = requests.Session()

r = s.get('http://httpbin.org/cookies', cookies={'from-my': 'browser'}) #使用了方法级别的参数cookies
print(r.text)
# '{"cookies": {"from-my": "browser"}}'

r = s.get('http://httpbin.org/cookies') #第二次请求cookies方法设置的请求消失了
print(r.text)
# '{"cookies": {}}'

6 会话也可用来为请求方法提供缺省数据。这是通过为会话对象的属性提供数据来实现的:

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'}) #headers是方法参数
print(r.text)

7 编码问题

当你收到一个响应时,Requests 会猜测响应的编码方式,用于在你调用 Response.text 方法时对响应进行解码。Requests 首先在 HTTP 头部检测是否存在指定的编码方式,如果不存在,则会使用 charade 来尝试猜测编码方式。

8 认证问题

Ref :http://requests-oauthlib.readthedocs.io/en/latest/oauth2_workflow.html#introduction

9 相关中文参考文档

http://docs.python-requests.org/zh_CN/latest/index.html