Python - HTTP 请求

  • 简述

    http 或超文本传输​​协议适用于客户端服务器模型。通常,Web 浏览器是客户端,而托管网站的计算机是服务器。在 python 中,我们使用 requests 模块来创建 http 请求。它是一个非常强大的模块,除了简单的请求和响应数据之外,它还可以处理 http 通信的许多方面。它可以处理身份验证、压缩/解压缩、分块请求等。
    HTTP 客户端以请求消息的形式向服务器发送 HTTP 请求,请求消息包括以下格式:
    • 请求行
    • 零个或多个标头(常规|请求|实体)字段,后跟 CRLF
    • 一个空行(即,在 CRLF 之前没有任何内容的行)指示标题字段的结尾
    • 可选消息体
    以下部分解释了 HTTP 请求消息中使用的每个实体。
  • 请求行

    Request-Line 以方法标记开始,接着是 Request-URI 和协议版本,并以 CRLF 结束。元素由空格 SP 字符分隔。
    
    Request-Line = Method SP Request-URI SP HTTP-Version CRLF
    
    让我们讨论一下请求行中提到的每个部分。
  • 请求方法

    请求method指示要在由给定标识的资源上执行的方法Request-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

    Request-URI 是一个统一资源标识符,用于标识应用请求的资源。以下是指定 URI 的最常用形式:
    
    Request-URI = "*" | absoluteURI | abs_path | authority
    
     
    序列号 方法及说明
    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.cainiaoya.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