python request 模块详细介绍

1. Python requests模块介绍

Python是一种广泛使用的编程语言,能够适用于许多应用程序开发领域。同时,Python也是一种具有许多标准库和第三方模块的高级语言。其中,requests模块是Python中一个非常流行的Web请求库,可以帮助我们发送HTTP/1.1请求,包括GET、POST、PUT、DELETE等Method,以及其他HTTP请求。requests模块是基于urllib3模块构建的,它使用Apache2 Licensed 的Python HTTP库,通过简单的API,可以轻松访问Web服务。

2. 安装requests模块

2.1 Windows环境下安装

在Windows环境中,你可以通过两种方式安装requests模块。第一种方式是使用pip命令行工具在Windows系统上安装requests模块。在CMD或PowerShell中输入以下命令即可:

pip install requests

第二种方式是通过下载源码包,然后使用Python的setup.py命令进行安装。首先,你需要前往requests模块的官方下载页面:https://pypi.python.org/pypi/requests 。下载最新版本的源码包,然后解压缩。打开命令行终端,切换到解压后的源码目录下,输入以下命令即可:

python setup.py install

2.2 Linux环境下安装

在Linux环境中,你可以使用包管理器来安装requests模块。例如,在Debian及其派生发行版上,你可以使用apt-get进行安装:

sudo apt-get install python-requests

在其他发行版上,你可以使用对应的包管理器进行安装即可。

3. requests模块基本使用方法

requests模块提供了许多方法来发送HTTP请求,例如get()、post()、put()、delete()等。这些方法都可以接收一个url参数。除此之外,还可以传递headers、params、data、json、proxies等参数。下面我们以get方法为例来介绍requests模块的基本使用方法。

3.1 基本的get()

基本的get方法可以发送一个HTTP GET请求,接收url参数,并返回一个响应(Response)对象。例如,我们要从一些网页上获取信息:

import requests

r = requests.get('https://www.python.org')

print(r.status_code) # 打印状态码

print(r.text) # 打印响应内容

运行该程序,你可以看到结果为:

200

...

即我们成功地获取到了Python官网首页html源代码,并打印出了状态码(200表示请求成功),以及响应内容。接下来我们将对这个基本的get()方法进行拓展。

3.2 带参数的get()

requests模块支持在请求URL中带参数,可以通过params参数来传递一个字典来设置这些参数。例如,我们要获取OpenWeatherMap网站上纽约市的天气预报:

import requests

url = 'http://api.openweathermap.org/data/2.5/weather'

params = {'q': 'New York', 'appid': 'YOUR_APP_ID'}

r = requests.get(url, params=params)

print(r.status_code) # 打印状态码

print(r.json()) # 打印响应内容

运行该程序,你可以看到结果为:

200

{'coord': {'lon': -73.97, 'lat': 40.78},

'weather': [{'id': 800, 'main': 'Clear', 'description': 'clear sky', 'icon': '01d'}],

'base': 'stations',

'main': {'temp': 289.28, 'pressure': 1007, 'humidity': 63, 'temp_min': 288.15, 'temp_max': 290.15},

'visibility': 16093,

'wind': {'speed': 4.1, 'deg': 280},

'clouds': {'all': 1},

'dt': 1529523300,

'sys': {'type': 1, 'id': 1969, 'message': 0.0068, 'country': 'US', 'sunrise': 1529498545, 'sunset': 1529551963},

'id': 5128638,

'name': 'New York',

'cod': 200}

可以看到,我们成功地获取了纽约市的天气预报数据,并打印出响应内容。

3.3 设置请求Header

当浏览器向Web服务器发送请求时,它通常会附带自己的User-Agent和Cookie等Header信息。在requests模块中,我们可以通过设置headers参数来设置我们自己的Header信息。例如:

import requests

headers = {'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3'}

r = requests.get('https://www.python.org', headers=headers)

print(r.status_code) # 打印状态码

运行该程序,你可以看到结果为:

200

可以看到,通过设置headers参数,我们成功地获取了Python官网的响应。

3.4 POST请求

requests模块也可以发送POST请求。使用post()方法,我们可以将数据传递给Web服务器。例如,我们要向一个网页发送POST请求,并发送一些数据:

import requests

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

data = {'key1': 'value1', 'key2': 'value2'}

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

print(r.status_code) # 打印状态码

print(r.text) # 打印响应内容

运行该程序,你可以看到结果为:

200

{

"args": {},

"data": "",

"files": {},

"form": {

"key1": "value1",

"key2": "value2"

},

"headers": {

"Accept": "*/*",

"Accept-Encoding": "gzip, deflate",

"Content-Length": "23",

"Content-Type": "application/x-www-form-urlencoded",

"Host": "httpbin.org",

"User-Agent": "python-requests/2.22.0",

"X-Amzn-Trace-Id": "Root=1-5f7ca887-242fe2c703ec7a473747b8f3"

},

"json": null,

"origin": "127.0.0.1",

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

}

可以看到,我们成功地向httpbin.org发送了POST请求,并发送了data参数。响应结果中的form字段包含了我们发送过去的参数。

3.5 处理Cookie

requests模块可以很方便地处理Cookie,使用CookieJar对象可以轻松地处理Session信息。例如,我们要从GitHub上获取某个用户的信息:

import requests

session = requests.Session()

first_url = 'https://github.com/login'

second_url = 'https://github.com/session'

r = session.get(first_url)

csrf = session.cookies['csrf']

data = {

'authenticity_token': csrf,

'login': 'your_username',

'password': 'your_password'

}

headers = {'referer': first_url}

r = session.post(second_url, headers=headers, data=data)

r = session.get('https://github.com/your_username')

print(r.status_code) # 打印状态码

print(r.text) # 打印响应内容

运行该程序,你可以看到结果为:

200

...

可以看到,我们成功地获取了GitHub用户的信息,同时我们也使用CookieJar对象来处理了Session信息。

3.6 代理

requests模块支持使用代理来发送请求。使用proxies参数,我们可以轻松地配置requests模块的代理功能。例如,我们要通过代理服务器访问百度:

import requests

proxies = {'http': 'http://10.10.1.10:3128', 'https': 'http://10.10.1.10:1080'}

r = requests.get('https://www.baidu.com', proxies=proxies)

print(r.status_code) # 打印状态码

运行该程序,你可以看到结果为:

200

可以看到,我们成功地使用代理服务器访问了百度,并打印出了状态码。

4. 结语

在本文中,我们对Python的requests模块进行了详细介绍,包括其中的基本使用方法,带参数的get()以及POST请求、设置请求Header、处理Cookie和使用代理。requests模块是Python中一个非常实用的Web请求库,应用广泛。希望这篇文章可以帮助你更好地了解requests模块,并在实际应用场景中发挥其优秀的功能。

后端开发标签