Python 请求入门 - GET 请求

简介

在很多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

这是你得到的回报: 使用<code>Response 200</code>的输出运行脚本

状态码

我们要做的第一件事就是检查状态码。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')

Response 200输出,带有响应OK的后续

只有在返回400或500状态代码时,才会显示消息Response Failed。尝试将URL更改为一些无稽之谈,以查看响应失败并显示404。

您可以通过添加以下内容直接查看状态代码:

1[label script.py]
2print(res.status_code)

这将直接向您显示状态代码,以便您可以自己检查号码。

404的失败输出

标头

你可以从响应中得到的另一个东西是头。您可以通过使用响应对象上的headers字典来查看它们。

1[label script.py]
2print(res.headers)

以标准out打印页眉的输出

报头与请求一起发送,并在响应中返回。使用报头,因此客户端和服务器都知道如何解释在响应/响应中发送和接收的数据。

我们可以看到返回的各种标头。很多时候,您不需要直接使用头信息,但如果您需要的话,它就在那里。

内容类型通常是您可能需要的类型,因为它揭示了数据的格式,例如HTML,JSON,PDF,文本等,但内容类型通常由请求处理,因此您可以访问返回的数据。

响应文本

最后,如果我们看一下res.text(这适用于文本数据,比如我们正在查看的HTML页面),我们可以看到构建Scotch主页所需的所有HTML。它不会被渲染,但我们看到它看起来像是属于苏格兰威士忌。如果您将其保存到一个文件中并打开它,您将看到类似于Scotch站点的内容。在实际情况中,会对单个网页发出多个请求,以加载图像、脚本和样式表等内容,因此如果您仅将HTML保存到文件中,则它在浏览器中的外观与Scotch.io页面的外观完全不同,因为只执行了一个请求来获取HTML数据。

1[label script.py]
2print(res.text)

在命令line上打印超文本标记语言数据

使用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翻译文本所需的所有信息。

请求使用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')

法语翻译的text

让我们来看看这个特定响应的标头。

1[label script.py]
2print(res.headers)

用output打印的页眉

显然,标头应该不同,因为我们正在与不同的服务器通信,但在本例中,内容类型是应用程序/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])

没有正方形bracketsBonjour

现在我们唯一看到的是翻译的文字。

当然,如果我们改变参数,我们会得到不同的结果。让我们将需要翻译的文本从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)

403错误 因此,当您使用API时,您需要检查事情是否成功,以便根据应用的需要处理错误情况。

结论

以下是我们学到的:

  • HTTP请求的工作原理
  • 响应中可能的各种状态代码
  • 如何使用Python请求库发送请求和接收响应
  • 如何使用语言翻译API翻译文本
  • 如何将应用程序/JSON内容响应转换为词典

如果您想做更多,请查看This List以查看可用的不同API,并尝试将它们用于PYTHON请求。

Published At
Categories with 技术
Tagged with
comments powered by Disqus