Python requests 模块,该模块主要用来发 送 HTTP 请求。
一、requests 方法
url 请求 url。
data 参数为要发送到指定 url 的字典、元组列表、字节或文件对象。
json 参数为要发送到指定 url 的 JSON 对象。
args 为其他参数,比如 cookies、headers、verify等。
示例:
# 导入 requests 包
import requests# 发送请求
x = requests.get('https://www.baidu.com/')# 返回 http 的状态码
print(x.status_code)# 响应状态的描述
print(x.reason)# 返回编码方式
print(x.apparent_encoding)
输出结果:
200
OK
utf-8
1、get方法详解
requests.get(url, params, args)
中,除了必传的请求地址url外,还有1个默认参数params,这个参数会对url进行处理。一般get方式请求,参数是通过url?key1=value1&key2=value2....
进行拼接的(即参数字段和值是=连接,参数之间连接符是&,接口路径通过?来连接参数内容),如果url已经带有参数,则可以不用params参数,如果url没有带参数,则requests.get()会将params的内容按照拼接逻辑拼接到url后。args 为其他参数,比如 cookies、headers、verify等。
import requests
# url未携带参数数据
r1 = requests.get("http://httpbin.org/get?name=gemey&age=22")
print("----------url未携带params参数,请求数据放到url地址中----------")
print(r1.text)# url携带参数数据
r2 = requests.get("http://httpbin.org/get", params={"name": "gemev", "age": 22})
print("\n----------url携带params参数,请求数据放到params中----------")
print(r2.text)# url携带参数数据中有列表
r3 = requests.get("http://httpbin.org/get", params={"name": "gemev", "age": [22, 45]})
print("\n----------url携带params参数,请求数据放到params中,数据中有列表----------")
print(r3.text)
2、post方法详解
如果想上传的数据较大,或者上传的数据对服务器方的数据库、文件等内容有修改,一般使用Post请求,post请求上传数据的方式有:表单、Json、文件等。
2.1、表单
post请求上传表单数据时,是通过data参数上传的,入参的数据是字典对象(dict)
格式:post(url, data, args)
import requestsurl = 'http://httpbin.org/post'
data = {'name': 'jack','age': 23
}
r = requests.post(url, data=data)
print(r.text)
如果不定义Content-Type,会被默认设置为application/x-www-form-urlencoded
2.2、Json
json也是post请求经常用到的数据上传格式,如果上传的数据是json格式,需要将python字典对象通过json参数传入
格式:post(url, json, args)
# -*- coding: utf-8 -*-
import requestsurl = 'http://httpbin.org/post'
data = {'name': 'jack','age': 23
}
r = requests.post(url, json=data)
print(r.text)
如果不定义Content-Type,Content-Type会被默认设置为application/json
2.3、文件上传
2.4、其他数据类型
Post请求不止上传文件、发送form、json数据,还支持html、xml等数据,这些数据一般通过data参数传入,但是需要在请求头的Content-Type字段申明数据类型。
3、定义header
headers中有很多内容,他们是以键对的形式定义出来,在request中,则是用过headers=headers来区分,前面为关键字headers,后面为自定义的头信息变量,变量名为headers
# -*- coding: utf-8 -*-
import requestsurl = 'http://httpbin.org/post'
headers = {'Content-Type': 'application/json;charset=UTF-8', 'User-Agent':'self-defind-user-agent'}
data = {'name': 'jack','age': 23
}
r = requests.post(url, json=data, headers=headers)
print(r.text)
4、定义cookie
很多接口请求需要附带cookies,服务端校验成功后才会返回正常的响应数据。
requests提供2种传递Cookie的方式:
方式一:通过请求头headers信息传递:headers参数中包含Cookie键值对(为了让服务端正常识别,cookie的值格式尽量为:key1=value1; key2=value2; xxx; keyn=valuen,)
# -*- coding: utf-8 -*-
import requestsurl = 'http://httpbin.org/post'
headers = {'Cookie': 'key1=value1;key2=value2', 'Content-Type': 'application/json;charset=UTF-8'}
data = {'name': 'jack','age': 23
}
r = requests.post(url, json=data, headers=headers)
print(r.text)
方式二:通过关键字参数cookies传递:cookies参数被传入字典,字典数据中的每个键值代表了一个cookie,键表示cookie的变量名称,值为对应的cookie值。
# -*- coding: utf-8 -*-
import requestsurl = 'http://httpbin.org/post'
headers = {'Content-Type': 'application/json;charset=UTF-8'}
cookies = {'c1': 'cookie_1', 'c2': 'cookie_value2'}
data = {'name': 'jack','age': 23
}
r = requests.post(url, json=data, headers=headers, cookies=cookies)
print(r.text)
5、超时设置
6、代理设置
7、认证
8、会话
二、 response 对象
每次调用 requests 请求之后,会返回一个 response 对象,该对象包含了具体的响应信息。,可以通过如下方法获取对应的响应信息,示例同上。