当前位置: 首页 > news >正文

python http服务搭建教程

 

作为互联网时代的基础技术之一, HTTP是一个简单的 HTTP协议,它包含了请求、应答和超文本传输控制等机制。HTTP协议由 TCP/IP协议族定义,其中包括了三个基本的服务:发送、接收、存储。客户端和服务器之间传输信息时,数据通过 TCP协议从发送者发送到接收者,它是一个透明的协议。在互联网中, HTTP协议通常用于建立 TCP/IP通道,并将数据传输到一个 TCP/IP服务器。

  • 一、安装与配置

    这里以 python2.3.4版本为例,安装过程如图: 首先安装依赖包:在 Python安装目录中,使用 pip install命令安装 python的所有依赖包,如果没有找到自己的包,可以参考 Python 2.x版本,找到后复制到自己的 python目录即可。注意:一定要保存好依赖包哦。 接下来安装服务端:使用 pip install命令安装服务端,也可以使用 dir命令添加本地的服务端。 这里需要注意的是,需要安装。 net服务端,点击运行即可,这里以 python2.3.4版本为例: 接下来开始配置网络环境。如果是本地机器可以直接使用本地的 ip地址作为域名进行访问;如果是服务器端则需要使用域名进行访问。下面就来配置一下本地环境。 在文本编辑界面中,输入需要执行的命令: test.py执行结果: test.py在文件中会创建一个test.py文件,其作用是接收服务器返回的请求并执行。如果想要执行某个特定的操作,例如发送 HTTP请求、解析 HTTP响应等,则需要在test.py文件中配置好相关参数。这里以发送 HTTP响应为例: 点击“运行”按钮后,会弹出一个对话框,此时我们需要将 url参数粘贴到对话框中。输入 URL后点击确定。 在文本编辑界面中输入 url参数,将参数粘贴到对话框中: 此时会弹出一个对话框,界面如下: 如果想要对请求进行响应的话,可以在test.py中配置相应的响应头和响应内容。根据个人需求进行设置即可。如图所示: 在文本编辑界面中输入请求参数后点击确定。此时会弹出一个对话框,选择相应的服务端选项卡。在此输入目标服务器的 ip地址、端口号、域名等信息。点击“运行”按钮后就可以开始发送 HTTP响应了: 至此配置成功!如果想要改变 HTTP响应的内容,则需要对相应的参数进行修改。

  • 二、 HTTP客户端

    客户端可以是一个 Web浏览器或一个桌面应用程序,也可以是一个智能手机或平板电脑。它必须能够执行 HTTP协议并提供服务,同时还需要实现一些基本的功能,例如请求、应答和存储等。在这里我们使用 Python来编写一个 HTTP客户端。 HTTP客户端通常使用与服务器端相同的 HTTP协议,但在许多情况下,它们有自己独特的功能。下面是一个简单的示例: 其中,f (x)是一个服务器返回的响应类型,f (y)是一个客户端返回的响应类型。这两个响应类型都可以使用一种称为“GET”和“POST”的方法来实现。 在这里,我们使用“python”作为脚本语言编写了一个简单的 HTTP客户端,该客户端可以接受来自服务器端的请求并返回响应内容。它将 HTTP协议中的三个主要部分整合到了一起,并实现了一些功能: 它提供了一系列信息来描述请求数据,例如请求类型(例如: GET/POST)、请求数据长度(例如:100字符)等。 2.响应头包含响应数据(如: GET)和响应内容(如: POST)。它提供了关于如何处理请求的信息,例如何时完成请求以及在发生任何错误时如何进行修复。 3.参数响应体:此头部包括响应信息中使用的所有参数(如: GET参数和 POST参数)以及数据包结构信息。它提供了一些与 TCP/IP模型有关的重要信息,包括: (1)客户端如何处理 TCP/IP模型中的三个基本模块(即服务端、客户端和报文转发) 4.服务器端处理请求 在这里,我们使用 Python的 Import模块来编写服务器端,使用 Socket模块来编写客户端。在实际项目中,我们使用 Import模块来处理客户端连接和服务器连接。这一过程主要包括三个步骤: 首先,我们创建一个 TCP/IP模型的对象,然后调用一个 Pipe函数来建立和读取 TCP/IP模型中的所有连接。最后,我们编写一个 Socket函数,并调用该函数来实现客户端与服务器之间的连接管理。

  • 三、 HTTP服务器端

    HTTP服务器端使用请求-应答机制,其主要目的是使客户端能够对服务器发送的请求做出响应,并保证数据的正确传输。在客户端和服务器之间,需要建立连接来进行信息传输。 HTTP客户端通过向服务器发送 HTTP请求服务器提供服务,而服务器则向客户端返回响应,双方之间通过 TCP/IP协议进行通信。 HTTP服务器端使用 TCP协议与客户端建立连接,并进行相关的数据传输。其主要工作包括: 1.创建 TCP连接并建立 HTTP会话; 2.对所请求的资源进行解析; 3.根据获取的资源信息生成响应; 4.如果需要,可以向客户端返回数据库信息。 HTTP服务器端通过 HTTP协议与客户端建立连接并进行数据传输,在该过程中,双方要遵守 TCP/IP协议、建立连接、发送数据、接收响应等一系列规则。同时,由于 HTTP协议自身存在着一些不足,比如响应时间过长、容易被篡改等问题。所以 HTTP协议并不适合经常传输数据的情况,只能用于小数据量的通信。

以下是使用Python内置的http.server模块创建简单的HTTP服务器的示例代码:


1. 创建一个简单的HTTP服务器,监听本地8000端口,并将请求的文件发送回客户端:
```python
import http.server
import socketserver
PORT = 8000
Handler = http.server.SimpleHTTPRequestHandler
with socketserver.TCPServer(("", PORT), Handler) as httpd:
print("serving at port", PORT)
httpd.serve_forever()
```
2. 创建一个自定义的HTTP请求处理程序,可以在请求时添加自定义的响应头和响应内容:
```python
import http.server
import socketserver
PORT = 8000
class MyHandler(http.server.SimpleHTTPRequestHandler):
def do_GET(self):
self.send_response(200)
self.send_header('Content-type', 'text/html')
self.end_headers()
self.wfile.write(b"<html><head><title>My Server</title></head>")
self.wfile.write(b"<body><p>This is my server.</p>")
self.wfile.write(b"</body></html>")
Handler = MyHandler
with socketserver.TCPServer(("", PORT), Handler) as httpd:
print("serving at port", PORT)
httpd.serve_forever()
```
3. 创建一个支持POST请求的HTTP服务器,可以接收并处理POST请求的数据:
```python
import http.server
import socketserver
import cgi
PORT = 8000
class MyHandler(http.server.BaseHTTPRequestHandler):
def do_POST(self):
form = cgi.FieldStorage(
fp=self.rfile,
headers=self.headers,
environ={'REQUEST_METHOD': 'POST'}
)
self.send_response(200)
self.send_header('Content-type', 'text/html')
self.end_headers()
self.wfile.write(b"<html><head><title>My Server</title></head>")
self.wfile.write(b"<body><p>POST request received:</p>")
self.wfile.write(b"<ul>")
for field in form.keys():
self.wfile.write(b"<li>{0}={1}</li>".format(field, form[field].value))
self.wfile.write(b"</ul></body></html>")
Handler = MyHandler
with socketserver.TCPServer(("", PORT), Handler) as httpd:
print("serving at port", PORT)
httpd.serve_forever()
```

相关文章:

python http服务搭建教程

作为互联网时代的基础技术之一&#xff0c; HTTP是一个简单的 HTTP协议&#xff0c;它包含了请求、应答和超文本传输控制等机制。HTTP协议由 TCP/IP协议族定义&#xff0c;其中包括了三个基本的服务&#xff1a;发送、接收、存储。客户端和服务器之间传输信息时&#xff0c;数据…...

高速数字信号VS射频信号,到底哪个更难设计?

一博高速先生成员&#xff1a;黄刚熟悉高速先生的小伙伴们会知道&#xff0c;我们是以研究高速数字信号为主的团队&#xff0c;从不到1G到目前在研究的112G&#xff0c;高速先生就这样一直研究过来的&#xff0c;分享的案例也大多是以高速数字信号为主的案例。最近受到我们粉丝…...

相对路径读取json文件 labelme_shapes_to_label 标签

直接读取&#xff1a; import jsonwith open(file.json, r, encodingutf-8) as f:data json.load(f) 忽略错误读取&#xff1a; import jsonimport codecs with codecs.open(file.json, r, encodingutf-8, errorsignore) as f:data json.load(f) labelme_shapes_to_labe…...

IDEA工具避坑指南(十一):git导入SpringBoot后|不识别依赖 |大量爆红 | 无法启动

一、前言 使用在IDEA2019中&#xff0c;使用Git工具导入SpringBoot项目后&#xff0c;java类的依赖包大量爆红、不能启动SpringBoot&#xff0c;不能自动识别启动类。 提示&#xff1a;如果刚拉取的项目&#xff0c;只有.git和.idea文件&#xff0c;没有src或java目录&#xff…...

管道命令(sort、uniq、tr、cut、eval命令)

一、sort命令 1、作用 以行为单位对文件内容进行排序也可以根据不同的数据类型来排序 2、语法格式 sort [选项] 参数cat file | sort 选项3、常用选项 -f∶ 忽略大小写&#xff0c;会将小写字母都转换为大写字母来进行比较&#xff1b; -b∶ 忽略每行前面的空格&#xff1b…...

Windows10系统忘记登录密码解决办法

Windows10系统忘记登录密码解决办法1. 前言1.1. 环境准备1.2. 官方PE安装系统2. 虚拟机配置2.1. 编辑虚拟机2.2. 进入固件2.3. 编辑启动项顺序2.4. 进入PE系统2.5. 恢复原系统3. 修改程序操作步骤3.1. 调用cmd程序3.2. 查看所有磁盘信息3.3. 进入原系统C盘3.4. 重命名程序3.5. …...

Design Complie实验,使用2007年Synopsy的Lab Guide

Design Complie实验&#xff0c;使用2007年Synopsy的Lab Guide 文章目录Design Complie实验&#xff0c;使用2007年Synopsy的Lab Guide1 DC实验1.1 Setup and Synthesis FlowTask 1 Update the setup fileTask 2 Invoke Design VisionTask 3 Read the Design into DC MemoryTas…...

问题 B: C语言10.2

题目描述&#xff1a; 输入a、b、c三个整数&#xff0c;按先大后小的顺序输出a、b和c。注意请使用指针变量的方式进行比较和输出。 输入 三个用空格隔开的整数a、b和c。 输出 按先大后小的顺序输出a、b和c&#xff0c;用空格隔开。 请注意行尾输出换行。 样例输入 9 0 1…...

多线程控制并发数目工具类Semaphore

文章目录前言Semaphore原理Semaphore源码解析内部继承AQS保证同步acquire获取许可release释放许可实战演示总结前言 在多线程编码过程中&#xff0c;我们会用到多线程来提升运行效率。比如我们的Executors创建线程池&#xff0c;程序尽可能的压榨CPU资源来提升我们程序吞吐量。…...

Redis篇之五大数据类型

1、五大数据类型 4.1、String&#xff08;字符串&#xff09; String是Redis最基本的类型&#xff0c;你可以理解成与Memcached一模一样的类型&#xff0c;一个key对应一个value String类型是二进制安全的。意味着Redis的string可以包含任何数据。比如jpg图片或者序列化的对象…...

Linux->文件系统磁盘文件管理

目录 1 磁盘结构 2 逻辑抽象管理磁盘 2.1 逻辑抽象 2.2 管理磁盘 2.3 补充知识 3 软硬连接 1 磁盘结构 本篇的学习需要建立在大家在脑海中有一副磁盘的结构才能进行下去&#xff0c;所以我会以图解的方式为大家简单讲解一下&#xff0c;注&#xff1a;博主对这一部分并不是…...

echarts tooltip文字太长换行

tooltip文字太长换行&#xff0c;设置了宽度也没有换行&#xff0c;加上一句&#xff1a; extraCssText: ‘max-width:300px; white-space:pre-wrap’, 没加之前是这样&#xff1a; 加上之后 extraCssText: ‘max-width:300px; white-space:pre-wrap’, tooltip: {trigger: &…...

Docker 部署Jira8.1.0

Jira与Confluence一样&#xff0c;都需要用到独立的数据库&#xff0c;对于数据库的安装我们不做介绍&#xff0c;主要介绍如何用Docker部署Jira以及对Jira进行破解的操作。 1、数据库准备 关于数据库官方文档说明&#xff1a;https://confluence.atlassian.com/adminjiraserv…...

枚举、模拟法(蓝桥杯卡片、数的分解为例)

枚举和模拟算法是计算机领域常用的两种基本算法。枚举算法是一种通过列举所有可能的情况来解决问题的方法。模拟算法则是通过模拟真实场景来解决问题。 枚举、模拟法 枚举算法是指将问题分解为一系列离散的情况&#xff0c;通过枚举所有可能的情况&#xff0c;逐一检查每种情…...

DC-DC升压变换器直流隔离高压输出稳压电源模块5v12v24v48v转50v110v150v220v250v300v350v500v

HRB 系列隔离宽电压输入高电压稳压输出 特点 效率高达 80%以上1*1英寸标准封装单电压输出稳压输出工作温度: -40℃~85℃阻燃封装&#xff0c;满足UL94-V0 要求温度特性好可直接焊在PCB 上应用 HRB 0.2~10W 系列模块电源是一种DC-DC升压变换器。该模块电源的输入电压分为&#…...

jQuery创建、添加、删除元素

一、创建元素 语法&#xff1a; $("<li></li>"); 动态的创建了一个 <li> 二、添加元素 1. 内部添加 1、element.append(内容) 把内容放入匹配元素内部最后面&#xff0c;类似原生 appendChild。 2、element.prepend(内容) 把内容放入匹…...

产品快讯丨神策数据 A/B 测试试验指标管理重磅升级

神策数据&#xff1a;为了更好地帮助企业管理试验指标&#xff0c;神策数据 A/B 测试完善了指标类型、配置方式、计算原理等&#xff0c;帮助分析师、运营同学等明确计算逻辑&#xff0c;并最大程度减少歧义以及与技术同学沟通的成本&#xff0c;以实现企业内部信息的有效统一。…...

游戏开发之Unity2021URP项目场景的构建

地面的修改和编辑&#xff1a;地面插件的使用 打开包管理器&#xff0c;在左边的包那里选择“Unity注册表”&#xff0c;在右边进行搜索“Polybrush”&#xff0c;之后选择右下角的安装 安装完之后要选择样本中的URP进行导入&#xff0c;因为我们的项目是URP渲染管线的&#x…...

数学分析:多元微积分1

卓里奇的数学分析的好处在于直接从多元函数来入手多元微积分&#xff0c;引出矩阵&#xff0c;十分自然。 紧集的概念&#xff0c;感觉直接用闭集去理解就行&#xff0c;&#xff08;对于图形学来说&#xff09;。 多元函数的极限&#xff0c;其实和单元函数并没有什么区别。 这…...

STC32G 三轮车负压电磁

文章目录前言整车效果控制思路循迹环岛处理障碍处理关键代码部分差比和以及当前速度计算角速度环速度环环岛处理障碍处理前言 年后就没怎么碰车了&#xff0c;到3月中旬换三轮了&#xff0c;可算有一点成效了&#xff0c;做个记录。 整车效果 三轮负压电磁慢速元素识别控制思…...

SciencePlots——绘制论文中的图片

文章目录 安装一、风格二、1 资源 安装 # 安装最新版 pip install githttps://github.com/garrettj403/SciencePlots.git# 安装稳定版 pip install SciencePlots一、风格 简单好用的深度学习论文绘图专用工具包–Science Plot 二、 1 资源 论文绘图神器来了&#xff1a;一行…...

QMC5883L的驱动

简介 本篇文章的代码已经上传到了github上面&#xff0c;开源代码 作为一个电子罗盘模块&#xff0c;我们可以通过I2C从中获取偏航角yaw&#xff0c;相对于六轴陀螺仪的yaw&#xff0c;qmc5883l几乎不会零飘并且成本较低。 参考资料 QMC5883L磁场传感器驱动 QMC5883L磁力计…...

mongodb源码分析session执行handleRequest命令find过程

mongo/transport/service_state_machine.cpp已经分析startSession创建ASIOSession过程&#xff0c;并且验证connection是否超过限制ASIOSession和connection是循环接受客户端命令&#xff0c;把数据流转换成Message&#xff0c;状态转变流程是&#xff1a;State::Created 》 St…...

华为OD机试-食堂供餐-二分法

import java.util.Arrays; import java.util.Scanner;public class DemoTest3 {public static void main(String[] args) {Scanner in new Scanner(System.in);// 注意 hasNext 和 hasNextLine 的区别while (in.hasNextLine()) { // 注意 while 处理多个 caseint a in.nextIn…...

HBuilderX安装(uni-app和小程序开发)

下载HBuilderX 访问官方网站&#xff1a;https://www.dcloud.io/hbuilderx.html 根据您的操作系统选择合适版本&#xff1a; Windows版&#xff08;推荐下载标准版&#xff09; Windows系统安装步骤 运行安装程序&#xff1a; 双击下载的.exe安装文件 如果出现安全提示&…...

【python异步多线程】异步多线程爬虫代码示例

claude生成的python多线程、异步代码示例&#xff0c;模拟20个网页的爬取&#xff0c;每个网页假设要0.5-2秒完成。 代码 Python多线程爬虫教程 核心概念 多线程&#xff1a;允许程序同时执行多个任务&#xff0c;提高IO密集型任务&#xff08;如网络请求&#xff09;的效率…...

浅谈不同二分算法的查找情况

二分算法原理比较简单&#xff0c;但是实际的算法模板却有很多&#xff0c;这一切都源于二分查找问题中的复杂情况和二分算法的边界处理&#xff0c;以下是博主对一些二分算法查找的情况分析。 需要说明的是&#xff0c;以下二分算法都是基于有序序列为升序有序的情况&#xf…...

使用 Streamlit 构建支持主流大模型与 Ollama 的轻量级统一平台

🎯 使用 Streamlit 构建支持主流大模型与 Ollama 的轻量级统一平台 📌 项目背景 随着大语言模型(LLM)的广泛应用,开发者常面临多个挑战: 各大模型(OpenAI、Claude、Gemini、Ollama)接口风格不统一;缺乏一个统一平台进行模型调用与测试;本地模型 Ollama 的集成与前…...

处理vxe-table 表尾数据是单独一个接口,表格tableData数据更新后,需要点击两下,表尾才是正确的

修改bug思路&#xff1a; 分别把 tabledata 和 表尾相关数据 console.log() 发现 更新数据先后顺序不对 settimeout延迟查询表格接口 ——测试可行 升级↑&#xff1a;async await 等接口返回后再开始下一个接口查询 ________________________________________________________…...

华为OD机考-机房布局

import java.util.*;public class DemoTest5 {public static void main(String[] args) {Scanner in new Scanner(System.in);// 注意 hasNext 和 hasNextLine 的区别while (in.hasNextLine()) { // 注意 while 处理多个 caseSystem.out.println(solve(in.nextLine()));}}priv…...