• 使用python实现http协议的方法


    要使用Python编写一个接口,其入参格式为x-www-form-urlencoded,你可以使用requests库。requests库是一个流行的HTTP库,它使得发送HTTP请求变得非常简单。

    下面是一个简单的示例,展示如何使用requests库发送一个POST请求,其中包含x-www-form-urlencoded格式的参数:

    1. import requests
    2. def send_request(url, data):
    3. # 设置请求头,指定参数的格式为 x-www-form-urlencoded
    4. headers = {
    5. 'Content-Type': 'application/x-www-form-urlencoded;charset=UTF-8'
    6. }
    7. # 使用 requests.post 方法发送 POST 请求
    8. # 参数 url 是请求的 URL,参数 data 是要发送的数据
    9. # 参数 headers 是请求头
    10. response = requests.post(url, data=data, headers=headers)
    11. # 输出响应的状态码和内容
    12. print('Status code:', response.status_code)
    13. print('Response content:')
    14. print(response.text)
    15. # 示例用法:发送一个 POST 请求到某个 URL,并包含 x-www-form-urlencoded 格式的参数
    16. url = 'http://example.com/api' # 替换为你要发送请求的 URL
    17. data = {
    18. 'key1': 'value1', # 替换为你要发送的参数
    19. 'key2': 'value2'
    20. }
    21. send_request(url, data)

    在这个示例中,我们定义了一个名为send_request的函数,它接收两个参数:urldata。函数中设置了请求头,指定了参数的格式为x-www-form-urlencoded,然后使用requests.post方法发送了一个POST请求。最后,我们输出了响应的状态码和内容。

    在测试网络http接口的时候,最常用的工具有postman,这个工具的下载链接地址如下:

    Postman

    这里面包含了GET ,POST,PUTDELETEHEAD ,patch,options方法

    然后接下来,详情讲一讲使用的http协议到底是什么?

    HTTP 是一种应用层的协议,通过 TCP,或者是 TLS——一种加密过的 TCP 连接——来发送,当然,理论上来说可以借助任何可靠的传输协议。到目前为止,HTTP协议已经发展到HTTP/3.0版本。然而,现在普遍应用的版本是HTTP/1.1版本,而正在推进的版本是HTTP/2.0版本,未来的版本是HTTP/3.0版本。

    其中http1.1里面,主要的工作流程是:客户端向服务端发送一段请求报文,服务端收到后,返回响应报文,客户端对响应内容进行展示。HTTP/1.0 默认为每一对 HTTP 请求/响应都打开一个单独的 TCP 连接。当需要接连发起多个请求时,工作效率相比于它们之间共享同一个 TCP 连接要低。

    值得强调的是:一个 HTTP 的请求必定是由客户端发起,服务器端回复响应。服务器在没有接收到请求之前不会发送响应。为了设计一种更匹配 HTTP 的传输层协议,各种实验正在进行中。例如,Google 正在测试一种基于 UDP 构建,更可靠、高效的传输层协议——QUIC

    报文(专业名词)是在 HTTP 应用程序之间发送的数据块

    1. <method> <path> <HTTP version>
    2. <headers>
    3. <entity-body>

    这是报文的数据格式:

    其中method是指像get,post这一类的方法,path是你的目标http网址,http version就是遵守的版本,headers被叫做首部,里面包含有许多的请求头,bodyapplication/json , image/jpeg , application/zip …单项内容(⽂本或非⽂本都可以),用于 Web Api 的响应或者 POST / PUT 的请求。

    URL的结构:包括协议http://)、域名(这里的域名是developer.mozilla.org),或是 TCP 的端口

    默认情况下,HTTP 请求是按顺序发出的。下一个请求只有在当前请求收到响应过后才会被发出。由于会受到网络延迟和带宽的限制,在下一个请求被发送到服务器之前,可能需要等待很长时间。

    客户端发送http的时候如下所示:

    1. GET /resources/public-data/ HTTP/1.1
    2. Host: bar.other
    3. User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.14; rv:71.0) Gecko/20100101 Firefox/71.0
    4. Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
    5. Accept-Language: en-us,en;q=0.5
    6. Accept-Encoding: gzip,deflate
    7. Connection: keep-alive
    8. Origin: https://foo.example
    • Content-Type 标头所指定的媒体类型的值仅限于下列三者之一:
      • text/plain(html,xml等)
      • multipart/form-data
      • application/x-www-form-urlencoded

    服务器如何响应:

    HTTPCopy to Clipboard

    1. HTTP/1.1 200 OK
    2. Date: Mon, 01 Dec 2008 00:23:53 GMT
    3. Server: Apache/2
    4. Access-Control-Allow-Origin: *
    5. Keep-Alive: timeout=2, max=100
    6. Connection: Keep-Alive
    7. Transfer-Encoding: chunked
    8. Content-Type: application/xml

    当响应的是附带身份凭证的请求时,服务端必须明确 Access-Control-Allow-Origin 的值,而不能使用通配符“*”。

    参考链接:HTTP 概述 - HTTP | MDN (mozilla.org)

  • 相关阅读:
    Python绘图系统23:导入多个坐标轴的数据
    EasyExcel代码层面设置写出的Excel样式、以及拦截器策略的使用、自动列宽设置、EasyExcel默认设置详解
    Java学习笔记(十四)
    Python前后通吃,可在浏览器端运行
    TCP协议之《自动阻塞CORK控制》
    AD19 基础应用技巧(PCB布板规范)
    AxGlyph矢量绘图软件 | 绘图软件
    django MEDIA_URL 和 MEDIA_ROOT 如何配置
    目标检测算法
    改bug问题
  • 原文地址:https://blog.csdn.net/Helloorld_1/article/details/134038589