Python - HTTP 请求

HTTP请求是指从客户端到服务器端的请求消息。包括:消息首行中,对资源的请求方法、资源的标识符及使用的协议。

http或超文本传输协议适用于客户端服务器模型。 通常 Web 浏览器是客户端,托管网站的计算机是服务器。 在 python 中,使用 requests 模块创建 http 请求。 它是一个非常强大的模块,除了简单的请求和响应数据之外,它还可以处理 http 通信的许多方面。 它可以处理身份验证、压缩/解压缩、分块请求等。

HTTP客户端以请求消息的形式向服务器发送 HTTP 请求,请求消息包括以下格式:

  • Request-Line (请求行)
  • 零个或多个标头(通用|请求|实体)字段后跟 CRLF
  • 一个空行(即,CRLF 之前没有任何内容的行)指示标头字段的结尾
  • 可选的消息正文

以下部分解释了 HTTP 请求消息中使用的每个实体。


Request-Line

Request-Line (请求行)以方法标记开头,后跟 Request-URI 和协议版本,最后以 CRLF 结尾。 元素由空格 SP 字符分隔。

Request-Line = Method SP Request-URI SP HTTP-Version CRLF

让我们讨论请求行中提到的每个部分。


请求方式

请求方法表示对给定Request-URI标识的资源执行的方法。 该方法区分大小写,应始终以大写形式提及。 下表列出了 HTTP/1.1 中所有支持的方法。

S.N. 方法和说明
1 GET

GET 方法用于使用给定的 URI 从给定的服务器检索信息。 使用 GET 的请求应仅检索数据,不应对数据产生其他影响。

2 HEAD

与 GET 相同,但它只传输状态行和标题部分。

3 POST

POST 请求用于向服务器发送数据,例如,使用 HTML 表单发送客户信息、文件上传等。

4 PUT

用上传的内容替换目标资源的所有当前表示。

5 DELETE

删除 URI 给出的目标资源的所有当前表示。

6 CONNECT

建立到由给定 URI 标识的服务器的隧道。

7 OPTIONS

描述目标资源的通信选项。

8 TRACE

执行消息回送测试以及目标资源的路径。


Request-URI

Request-URI 是一个统一资源标识符,用于标识应用请求的资源。 以下是指定 URI 的最常用形式:

Request-URI = "*" | absoluteURI | abs_path | authority
 
S.N. 方法和说明
1 星号 * 在 HTTP 请求不适用于特定资源但适用于服务器本身时使用,并且仅当使用的方法不一定适用于资源时才允许使用。 例如:

OPTIONS * HTTP/1.1

2 absoluteURI 在向代理发出 HTTP 请求时使用。 请求代理转发来自有效缓存的请求或服务,并返回响应。 例如:

GET http://www.w3.org/pub/WWW/TheProject.html HTTP/1.1

3 Request-URI 的最常见形式是用于标识源服务器或网关上的资源。 例如,希望直接从源服务器检索资源的客户端将创建一个到主机"www.w3.org"的端口 80 的 TCP 连接,并发送以下行:

GET /pub/WWW/TheProject.html HTTP/1.1

Host: www.w3.org

注意绝对路径不能为空; 如果原始 URI 中不存在,则必须将其指定为"/"(服务器根目录)。


使用 Python 请求

我们将使用 requests 请求模块来学习 http 请求。

pip install requests 

在下面的示例中,我们看到了一个简单的 GET 请求并打印出响应结果的情况。 我们选择只打印前 300 个字符。

# How to make http request
import requests as req
r = req.get('http://www.tutorialspoint.com/python/')
print(r.text)[0:300]

当运行上面的程序时,得到以下输出 −

<!DOCTYPE html>
<!--[if IE 8]><html class="ie ie8"> <![endif]-->
<!--[if IE 9]><html class="ie ie9"> <![endif]-->
<!--[if gt IE 9]><!-->	<html> <!--<![endif]-->
<head>
<!-- Basic -->
<meta charset="utf-8">
<title>Python Tutorial</title>
<meta name="description" content="Python Tutorial