如何在Python中实现HTTP请求

454 阅读4分钟
  • Python Requests Library - 你在Python中的第一个HTTP请求

一般方法语法

requests.nameofmethod(parameters)

背景介绍

请求库为Python程序员提供了对网站的简单访问。通过使用这个库,编码员可以连接、访问和执行各种数据操作任务。周围有很多库可以进行 HTTP 请求。然而,请求库似乎是最受欢迎的。

当该 请求库发送一个URL时,会发生以下情况。

  • DNS查询将URL转换为一个IP地址(例如:312.245.123.21 )。
  • request 库向这个IP地址发送一个请求。
  • 服务器试图验证这个请求。
  • 服务器返回一个状态代码,如下图所示。

如果requests 库在计算机上不存在,请在继续之前导航到 安装所需的库然后再继续。

状态代码

HTTP响应状态代码分为五类或类别。状态代码的第一个数字定义了响应的类别。后面两个数字没有任何分类或归类的作用。这五个类别是:

1XX信息性响应收到请求后继续处理。
2XX成功请求被成功接收,理解并接受。
3XX重新定向需要进一步的行动来完成该请求。
4XX客户端错误请求包含无效的语法或不完整的数据。
5XX服务器错误服务器未能满足一个有效的请求。

安装所需的库

在任何请求发生之前,将需要安装一个新的库。请求库允许访问它的许多方法,并使数据操作变得轻而易举!

要安装这个库,请导航到一个IDE 终端。在命令提示符()下,执行下面的代码。对于本例中使用的终端,命令提示符是一个美元符号()下,执行下面的代码。对于本例中使用的终端,命令提示符是一个美元符号()。你的终端提示可能不同。

$ pip install requests

点击键盘上的键,开始安装过程。

如果安装成功,终端上会显示一条信息,表明这一点。

"获取 "请求。提出请求

这个方法使用GET请求来连接到一个网站。这个函数需要一个URL作为参数。在这个例子中,会返回一个状态码并显示连接的状态(成功/失败)。 如果无效,脚本会突然结束。

运行这个脚本。如果成功,一个以2XX开头的状态代码会输出到终端。

  • 第[1]行导入request 库。
  • 第[2]行试图连接到URL。
  • 第[3&4]行输出状态代码。这两行做的是同样的事情。
  • 第[5]行关闭打开的连接。
import requests
print(response.status_code)
response = requests.get('https://books.toscrape.com')

import requests
print(requests.codes.ok)
response.close()

输出

200
200

如上所述,如果你的状态代码不是200,很有可能脚本会失败。为了防止这种情况,可以用一个try/except语句来包装代码。

  • 第[1]行导入request 库。
  • 第[2]行初始化了try语句。这里的代码将首先运行。
  • 第[3]行执行一个GET请求,连接到URL。
  • 第[4]行如果成功,OK将输出到终端。
  • 第[5]行关闭打开的连接。
  • 第[6]行是except语句。如果try语句失败,代码就会落到这里。
  • 第[7]行向终端输出Error消息。脚本结束了。

代码:

import requests
try:
    response = requests.get('https://books.toscrape.com')
    print('OK')
    response.close()
except:
    print('Error')

"get "请求。响应内容

当下面的代码运行时,请求的网页上的HTML代码会输出到终端。

  • 第[1]行导入request 库。
  • 第[2]行初始化了try语句。这里的代码将首先运行。
  • 第[3]行执行一个GET请求,连接到URL。
  • 第[4]行如果成功,OK将输出到终端。
  • 第[5]行关闭打开的连接。
  • 第[6]行是except语句。如果try语句失败,代码就会落到这里。
  • 第[7]行将错误输出到终端。脚本结束了。

代码:

import requests
try:
    response = requests.get('https://books.toscrape.com')
    print(response.text)
    response.close()
except:
    print('Error')

输出

下面显示的是HTML代码的一小部分。

<article class="product_pod">
<div class="image_container">
<a href="catalogue/the-boys-in-the-boat-nine-americans-and-their-epic-quest-for-gold-at-the-1936-berlin-olympics_992/index.html"><img src="media/cache/66/88/66883b91f6804b2323c8369331cb7dd1.jpg" alt="The Boys in the Boat: Nine Americans and Their Epic Quest for Gold at the 1936 Berlin Olympics" class="thumbnail"></a>
</div>
...

使用 "timeout"

这个方法允许编码者设置代码在超时前等待多长时间。

  • 一个连接
  • 响应

在下面的例子中,连接时间等于2秒。响应时间等于4秒。

最好的做法是将超时参数添加到每个请求中。

注意:如果不输入,代码可以在崩溃前挂起两分钟。依赖于浏览器。

  • 第[1]行导入request 库。
  • 第[2]行初始化了try语句。这里的代码将首先运行。
  • 第[3]行执行一个GET请求以连接到URL,并设置一个超时
  • 第[4]行如果响应成功,URL的HTML代码将输出到终端。
  • 第[5]行关闭开放连接。
  • 第[6]行是except语句。如果try语句失败,代码就会落到这里。
  • 第[7]行输出Error到终端。脚本自动终止。

代码。

import requests
try:
    response = requests.get('https://books.toscrape.com', timeout=(2, 4))
    print(response.text)
    response.close()
except:
    print('Error')

输出

见上文。

总结

在这篇文章中,我们学习了如何:

  • 连接到一个URL
  • 检索和显示状态代码
  • 将HTML代码输出到终端
  • 使用try/except语句来捕捉错误
  • 设置一个超时
  • 关闭任何开放的连接