使用python实现http协议的方法

文章介绍了如何使用Python的requests库发送x-www-form-urlencoded格式的HTTPPOST请求,并给出了一个示例。此外,还提到了Postman作为常用的测试工具和HTTP协议的基本工作原理,包括HTTP/1.1和HTTP/2.0版本的差异。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

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

import requests  
  
def send_request(url, data):  
    # 设置请求头,指定参数的格式为 x-www-form-urlencoded  
    headers = {  
        'Content-Type': 'application/x-www-form-urlencoded;charset=UTF-8'  
    }  
  
    # 使用 requests.post 方法发送 POST 请求  
    # 参数 url 是请求的 URL,参数 data 是要发送的数据  
    # 参数 headers 是请求头  
    response = requests.post(url, data=data, headers=headers)  
  
    # 输出响应的状态码和内容  
    print('Status code:', response.status_code)  
    print('Response content:')  
    print(response.text)  
  
# 示例用法:发送一个 POST 请求到某个 URL,并包含 x-www-form-urlencoded 格式的参数  
url = 'http://example.com/api'  # 替换为你要发送请求的 URL  
data = {  
    'key1': 'value1',  # 替换为你要发送的参数  
    'key2': 'value2'  
}  
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 应用程序之间发送的数据块

<method> <path> <HTTP version>
<headers>

<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的时候如下所示:

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

服务器如何响应:

HTTPCopy to Clipboard

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

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Helloorld_11

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值