Python - HTTP请求



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

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

  • 请求行
  • 零个或多个报头(通用|请求|实体)字段,后跟CRLF
  • 空行(即,CRLF之前没有任何内容的行),表示报头字段的结束
  • 可选的消息体

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

请求行

请求行以方法标记开头,后跟请求URI和协议版本,最后以CRLF结尾。元素之间用空格SP字符分隔。

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

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

请求方法

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

序号 方法和描述
1 GET

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

2 HEAD

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

3 POST

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

4 PUT

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

5 DELETE

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

6 CONNECT

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

7 OPTIONS

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

8 TRACE

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

请求URI

请求URI是统一资源标识符,它标识要对其应用请求的资源。以下是指定URI最常用的形式:

Request-URI = "*" | absoluteURI | abs_path | authority
 
序号 方法和描述
1 星号**\* **用于HTTP请求不适用于特定资源,而是适用于服务器本身的情况,并且仅当使用的方法不一定会应用于资源时才允许。例如:

OPTIONS \* HTTP/1.1

2 当向代理服务器发出HTTP请求时,使用**absoluteURI**。请求代理服务器转发请求或从有效缓存中提供服务,并返回响应。例如:

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

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

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

Host: www.w3.org

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

使用Python requests

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

pip install requests 

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

# How to make http request
import requests as req
r = req.get('https://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
广告
© . All rights reserved.