简介
在很多Web应用中,通过API连接到各种第三方服务是很正常的。当您使用这些API时,您可以访问天气信息、体育比分、电影列表、tweet、搜索引擎结果和图片等数据。您还可以使用API为您的应用程序添加功能。这些方面的例子包括支付、日程安排、电子邮件、翻译、地图和文件传输。如果你要自己创建其中的任何一个,将需要大量的时间,但使用API,只需几分钟就可以连接到一个API并访问其功能和数据。
在本文中,我们将了解Python Requests库,它允许您在Python中发送HTTP请求。
由于使用API就是发送HTTP请求和接收响应,因此请求允许您在Python语言中使用API。我们将在这里演示语言转换API的使用,这样您就可以看到它是如何工作的示例。
HTTP请求快速概览
HTTP请求是Web工作的方式。每次导航到网页时,浏览器都会向网页服务器发出多个请求。然后服务器响应呈现页面所需的所有数据,然后浏览器实际呈现页面,以便您可以看到它。
一般过程如下:一个客户端(像一个浏览器或Python脚本使用请求)将发送一些数据到一个URL,然后位于URL的服务器将读取数据,决定如何处理它,并返回一个响应给客户端。最后,客户端可以决定如何处理响应中的数据。
客户端在请求中发送的部分数据是请求方法。一些常见的请求方法有GET、POST和PUT。GET请求通常只用于读取数据而不对某些内容进行更改,而POST和PUT请求通常用于修改服务器上的数据。因此,举例来说,条纹API允许您使用POST请求来创建新的费用,这样用户就可以从您的应用程序中购买一些东西。
<$>[备注] 注意: 本文将介绍GET请求,因为我们不会修改服务器上的任何数据。 <$>
当从Python脚本或在Web应用程序中发送请求时,作为开发人员,您可以决定在每个请求中发送什么以及如何处理响应。因此,让我们先向Scotch.io发送请求,然后使用语言转换API来探索这一点。
安装Python请求
在我们可以执行任何操作之前,我们需要安装库。因此,让我们继续使用pi
安装请求。如果您还没有虚拟环境,那么首先创建一个虚拟环境是一个好主意。
1pip install requests
我们的第一个要求
首先,让我们使用请求Scotch.io站点的请求。创建一个名为script.py
的文件,并在其中添加以下代码。在本文中,我们将没有太多代码可用,因此当有变化时,您只需更新现有代码,而不是添加新行。
1[label script.py]
2import requests
3
4res = requests.get('https://scotch.io')
5
6print(res)
因此,这段代码所做的就是向Scotch.io发送GET请求。这与您的浏览器为查看此页面而发送的请求类型相同,但唯一的区别是请求不能实际呈现HTML,因此您将只获得原始的HTML和其他响应信息。
我们这里使用的是.get()
函数,但是请求允许您使用其他函数,如.post()
和.put()
来发送这些请求。
您可以通过执行script.py文件来运行它。
1python script.py
这是你得到的回报:
的输出运行脚本
状态码
我们要做的第一件事就是检查状态码。HTTP代码范围从1XX到5XX。常见的状态代码有200、404和500。
以下是每个状态代码含义的快速概述:
- 1XX-信息
- 2XX-成功
- 3XX-重定向
- 4xx-客户端错误(您犯了一个错误)
- 5XX-服务器错误(他们犯了错误)
通常,当您执行自己的请求时,您要查找的是200秒的状态代码。
请求识别出4xx和5xx状态码为错误,因此如果返回这些状态码,则请求的响应对象的计算结果为False
。
您可以通过检查响应的真实性来测试请求是否成功响应。例如:
1[label script.py]
2if res:
3 print('Response OK')
4else:
5 print('Response Failed')
的后续
只有在返回400或500状态代码时,才会显示消息Response Failed
。尝试将URL更改为一些无稽之谈,以查看响应失败并显示404。
您可以通过添加以下内容直接查看状态代码:
1[label script.py]
2print(res.status_code)
这将直接向您显示状态代码,以便您可以自己检查号码。
的失败输出
标头
你可以从响应中得到的另一个东西是头。您可以通过使用响应对象上的headers字典来查看它们。
1[label script.py]
2print(res.headers)
打印页眉的输出
报头与请求一起发送,并在响应中返回。使用报头,因此客户端和服务器都知道如何解释在响应/响应中发送和接收的数据。
我们可以看到返回的各种标头。很多时候,您不需要直接使用头信息,但如果您需要的话,它就在那里。
内容类型通常是您可能需要的类型,因为它揭示了数据的格式,例如HTML,JSON,PDF,文本等,但内容类型通常由请求处理,因此您可以访问返回的数据。
响应文本
最后,如果我们看一下res.text
(这适用于文本数据,比如我们正在查看的HTML页面),我们可以看到构建Scotch主页所需的所有HTML。它不会被渲染,但我们看到它看起来像是属于苏格兰威士忌。如果您将其保存到一个文件中并打开它,您将看到类似于Scotch站点的内容。在实际情况中,会对单个网页发出多个请求,以加载图像、脚本和样式表等内容,因此如果您仅将HTML保存到文件中,则它在浏览器中的外观与Scotch.io页面的外观完全不同,因为只执行了一个请求来获取HTML数据。
1[label script.py]
2print(res.text)
上打印超文本标记语言数据
使用Translate接口
所以现在让我们来看一些更有趣的事情。我们将使用Yandex Translate API来执行将一些文本翻译成不同语言的请求。
要使用该API,首先需要注册。注册后,转到翻译API并创建API密钥。获得API密钥后,将其作为常量添加到文件中。以下是您可以执行所有这些操作的链接:https://tech.yandex.com/translate/
1[label script.py]
2API_KEY = 'your yandex api key'
我们需要API密钥的原因是,Yandex可以在我们每次想要使用他们的API时对我们进行身份验证。API密钥是一种轻量级身份验证形式,因为它在发送时被添加到请求URL的末尾。
要了解我们需要发送哪个URL才能使用该接口,我们可以查看Yandex.文档
如果我们查看那里,我们将看到使用其Translate API翻译文本所需的所有信息。
的语法
当我们看到一个带有&号(&)、问号(?)的URL时,和等号(=),可以确定URL是用于GET请求的。这些符号指定与URL一起使用的参数。
通常,方括号([])中的内容将是可选的。在这种情况下,格式、选项和回调是可选的,而键、文本和语言是请求所必需的。
因此,让我们添加一些代码以发送到该URL。您可以将我们创建的第一个请求替换为:
1[label script.py]
2url = 'https://translate.yandex.net/api/v1.5/tr.json/translate'
3res = requests.get(url)
有两种方法可以添加参数。我们可以直接将它附加到URL的末尾,也可以让请求为我们做这件事。要执行后一种操作,我们可以为参数创建词典。我们需要的三个项目是密钥、文本和语言。让我们使用API密钥创建词典,文本为‘Hello’
,语言为‘en-es’
,这意味着我们要将英语翻译成西班牙语。
如果您需要了解任何其他语言代码,您可以查看here.您要找的是639-1柱。
我们通过使用dict()
函数并传入我们的字典中需要的键和值来创建参数字典。
1[label script.py]
2params = dict(key=API_KEY, text='Hello', lang='en-es')
现在,我们获取参数字典并将其传递给.get()
函数。
1[label script.py]
2res = requests.get(url, params=params)
当我们以这种方式传递参数时,请求将继续并为我们将参数添加到URL。
现在,让我们为响应文本添加一条print语句,并查看响应中返回的内容。
1[label script.py]
2print(res.text)
我们看到三件事。我们看到了状态码,它与响应本身的状态码完全相同,我们看到了我们指定的语言,我们看到了列表中的翻译文本。所以你应该看到你好
的翻译文本。
再次尝试使用en-fr作为语言代码,您现在应该会在响应中看到‘Bonjour’
。
1[label script.py]
2params = dict(key=API_KEY, text='Hello', lang='en-fr')
让我们来看看这个特定响应的标头。
1[label script.py]
2print(res.headers)
打印的页眉
显然,标头应该不同,因为我们正在与不同的服务器通信,但在本例中,内容类型是应用程序/json,而不是文本/html。这意味着数据可以解释为JSON。
当应用程序/json是响应的内容类型时,我们能够让请求将响应转换为字典和列表,这样我们就可以更容易地访问数据。
为了将数据解析为JSON,我们在Response对象上使用.json()
方法。
如果您打印它,您将看到数据看起来相同,但格式略有不同。
1[label script.py]
2json = res.json()
3print(json)
之所以不同,是因为您从res.text获得的不再是纯文本。这一次它是一本词典的印刷版。
假设我们想要访问文本。由于这现在是一本词典,我们可以使用文本键。
1[label script.py]
2print(json['text'])
现在我们只看到这一个密钥的数据。在本例中,我们查看的是一个包含一个项目的列表,因此,如果我们想要直接获取列表中的文本,我们可以通过索引访问它。
1[label script.py]
2print(json['text'][0])
的
Bonjour
现在我们唯一看到的是翻译的文字。
当然,如果我们改变参数,我们会得到不同的结果。让我们将需要翻译的文本从Hello
改为Goodbye
,并将目标语言改回西班牙语,然后再次发送请求。
1[label script.py]
2params = dict(key=API_KEY, text='Goodbye', lang='en-es')
![) 尝试将较长的文本翻译成不同的语言,看看API会给您什么响应。
API错误案例翻译
最后,我们将查看一个错误案例。每件事并不总是有效的,所以我们需要知道什么时候会发生这种情况。
尝试通过删除一个字符来更改您的API密钥。当您这样做时,您的API密钥将不再有效。然后尝试发送请求。
如果您查看状态代码,您会看到以下内容:
1[label script.py]
2print(res.status_code)
因此,当您使用API时,您需要检查事情是否成功,以便根据应用的需要处理错误情况。
结论
以下是我们学到的:
- HTTP请求的工作原理
- 响应中可能的各种状态代码
- 如何使用Python请求库发送请求和接收响应
- 如何使用语言翻译API翻译文本
- 如何将应用程序/JSON内容响应转换为词典
如果您想做更多,请查看This List以查看可用的不同API,并尝试将它们用于PYTHON请求。