python搭建HTTP服务器并外网访问 - 内网穿透

2023-10-26

1.前言

Python作为热度比较高的编程语言,其语法简单且语句清晰,而且python有良好的兼容性,可以轻松的和其他编程语言((比如C/C++))建立的模块连接起来,而且python丰富强大的库,经过封装可以轻松调用,因此深受欢迎。

今天我们就尝试用python,建立一个简单的http服务器,用来展示本地电脑上指定的目录和文件。

2.本地http服务器搭建

一般来说,Python的简单http服务器不依赖Apache、IIS等这些复杂的服务器程序,因为其自带了只需一行命令就能建立http服务。但相对的,这个简单http服务也没法提供复杂功能,只能提供相对简单的目录服务。但对于想要学习和熟悉python,这又是必须进行的一步。

2.1.Python的安装和设置

首先,我们需要在本地安装python程序。Python程序可以在其官网(www.python.org/)找到对应操作系统版本下载。笔者使用的是Windows操作系统,因此选择Windows版本下载。

20230330132801

20230330132802

Python下载完成后,直接点击安装程序.exe即可进行安装。同时需要注意的是,在安装过程中,需要注意勾选Add python.exe to PATH选项。

20230330132803

20230330132804

完成python程序的安装后,我们就可以着手建立python的http服务器了

2.2.Python服务器设置和测试

由于python内建了简单http服务包,因此对于python来说,只需输入一行命令,就能轻松打开http服务。当然,要运行网页,就需要网页有显示内容。因此我们可以先建立一个用于存放网页文件的文件夹。例如笔者在本地电脑的E盘下新建了一个“test”文件夹

20230330132805

接着,以管理员身份运行本地电脑的命令提示符界面,并输入命令转入该文件所存放的硬盘

e:
  • 1

再转入打算共享的文件夹

cd test
  • 1

20230330132806

20230330132807

接着输入命令启动http服务

  • 如果Python版本为2.x,输入命令
python -m SimpleHTTPServer 8081
  • 1
  • 如果Python版本为3.x,输入命令
python -m http.server 8001
  • 1

其中的8081为打算搭建的服务器的输出端口,只要选择没有被占用的端口即可。如果出现防火墙的提示信息,只要选择允许访问即可。

命令行输入完毕后,python给出反馈Serving HTTP on 0.0.0.0 port 8081 ...,就说明我们python的http服务已经成功开启了,在本地8081端口下。

20230330132808

接着我们在本地电脑上的浏览器地址栏中,输入localhost:8081,就能打开打算分享的文件夹下的文件。

20230330132809

能看到这些内容,就说明本地电脑上python的http服务已经开启,并且已经可以查阅到这个文件夹下的文件。同样的,如果我们在这个文件夹下放入网页文件,也能够显示为网页。

此时在同一局域网下的设备,只要在浏览器中输入本地电脑的ip地址+端口号(具体格式为192.168.XXX.XXX:端口号),就能显示出python的网页。

20230330132810

不过,不能在公共互联网访问的网页总觉得缺少灵魂,因此我们可以借助cpolar内网穿透,创建一条内网穿透数据隧道,让我们可以在公共互联网条件下,访问到python。

3.cpolar的安装和注册

同样的,我们可以在cpolar的官网(cpolar - 安全的内网穿透工具)找到对应操作系统版本的软件,笔者这里也是选择Windows版本。

20230330132811

20230330132812

Cpolar软件下载完成后,将压缩包解压,并双击其中的.msi文件,即可自动进行安装,我们只要一路点击Next即可。

20230330132813

20230330132814

由于cpolar会为每个用户创建独立的数据隧道,并辅以用户密码和token码保证数据安全,因此我们在使用cpolar之前,需要进行用户注册。注册过程也非常简单,只要在cpolar主页右上角点击用户注册,在注册页面填入必要信息,就能完成注册。

20230330132815

20230330132816

3.1 Cpolar云端设置

完成cpolar的安装和注册后,我们就可以着手使用cpolar,创建一条内网穿透数据隧道,将本地电脑的python网页与公共互联网连接起来。需要注意的是,cpolar免费版的数据隧道每24小时重置一次。笔者并不想每天进行重置数据隧道设置,因此将cpolar升级至vip版,以便能获得能长期稳定存在的内网穿透数据隧道。

要生成长期稳定存在的内网穿透数据隧道,我们要先访问cpolar官网并登录,并在“仪表盘”页面左侧,找到并点击预留按钮,进入“预留”页面。

20230330132817

20230330132818

在“预留”页面中,我们可以看到cpolar提供了多种协议的数据隧道保留项目。而python服务器是http协议,因此我们找到保留二级子域名栏位。当然,如果已经向域名供应商购买了自己的域名的,也可以选择“保留自定义域名”栏位。

在“保留二级子域名”栏位,我们需要对打算保留的二级子域名进行信息设置,而这些设置的信息,也会成为我们在公共互联网访问本地python服务器的隧道入口(公共互联网地址的一部分)。具体需要设置的信息为:

  • 地区:服务器所在区域,就近选择即可
  • 二级域名会最终出现在生成的公共互联网地址中,作为网络地址的标识之一
  • 描述可以看做这条数据隧道的描述,能够与其他隧道区分开即可

输入这几项设置后,就可以点击右侧的保留按钮,将这条数据隧道保留下来。如果我们不想要这条隧道的入口了,也可以点击右侧的“x”,轻松将隧道删除

20230330132819

3.2 Cpolar本地设置

完成cpolar云端设置后,我们回到本地电脑上,打开并登录cpolar客户端(可以在浏览器中输入localhost:9200直接访问,也可以在开始菜单中点击cpolar客户端的快捷方式)。

20230330132820

点击客户端主界面左侧隧道管理——创建隧道按钮,进入本地隧道创建页面(如果要创建每24小时重置地址的临时数据隧道,可直接在此进行设置,不必再cpolar官网设置空白数据隧道)。

在这个页面,同样需要进行几项信息设置,这些信息设置包括:

  1. 隧道名称——可以看做cpolar本地的隧道信息注释,只要方便我们分辨即可;
  2. 协议——tomcat输出的是web网页,因此选择http协议;
  3. 本地地址——本地地址即为本地网站的输出端口号,我们之前设置了8081为输出端口,因此这里也填入8081;
  4. 域名类型——在这个例子中,我们已经在cpolar云端预留了二级子域名的数据隧道,因此勾选“二级子域名”(如果预留的是自定义域名,则勾选自定义域名),并在下一行“Sub Domain”栏中填入预留的二级子域名,这里我们填入“pythonweb”(如果只是创建临时数据隧道,则直接勾选“随机域名”,由cpolar客户端自行生成网络地址);
  5. 地区——与cpolar云端设置时一样,我们依照实际所在地就近填写;

20230330132821

完成这些设置后,就可以点击页面下方的创建按钮,将本地python服务器网页与cpolar云端保留的二级子域名连结起来,生成一条完整的内网穿透数据隧道。

隧道创建完成后,cpolar会自动跳转至隧道管理——隧道列表页面,在这个页面看到数据隧道的状态(是否畅通),或是控制隧道的开启、关闭或删除。如果需要对隧道的信息进行变更,也可以通过这里的“编辑”按钮进行

20230330132822

4.公网访问测试

数据隧道建立完成后,我们可以点击cpolar客户端左侧状态——在线隧道列表。找到能够访问本地python服务器页面的公共互联网地址。

20230330132823

只要将这个地址输入浏览器地址,就能轻松访问到本地电脑上的python服务器页面。

20230330132824

5.结语

至此,我们成功的使用python建立一个简单的服务器页面,并且通过cpolar为其创建了一条能够穿透内网屏障的数据隧道,将这个python网页发布到公共互联网上。其实,只要知道网页(或软件)的输出端口号,我们都可以使用cpolar穿透内网,让我们在公共互联网上访问到本地的网页(或软件)。

转载自cpolar极点云文章:Python快速搭建简单的HTTP服务器,并发布公网访问

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

python搭建HTTP服务器并外网访问 - 内网穿透 的相关文章

  • 如何查看Databricks中的所有数据库和表

    我想列出 Azure Databricks 中每个数据库中的所有表 所以我希望输出看起来像这样 Database Table name Database1 Table 1 Database1 Table 2 Database1 Table
  • 无法“安装”plpython3u - postgresql

    我正在尝试在 postgresql 中使用 python 语言 像这样的事情 create or replace function test a integer returns integer as if a 2 0 return even
  • Django 代理模型的继承和多态性

    我正在开发一个我没有启动的 Django 项目 我面临着一个问题遗产 我有一个大模型 在示例中简化 称为MyModel这应该代表不同种类的物品 的所有实例对象MyModel应该具有相同的字段 但方法的行为根据项目类型的不同而有很大差异 到目
  • Django 管理员在模型编辑时间歇性返回 404

    我们使用 Django Admin 来维护导出到我们的一些站点的一些数据 有时 当单击标准更改列表视图来获取模型编辑表单而不是路由到正确的页面时 我们会得到 Django 404 页面 模板 它是偶尔发生的 我们可以通过重新加载三次来重现它
  • SQLAlchemy 通过关联对象声明式多对多自连接

    我有一个用户表和一个朋友表 它将用户映射到其他用户 因为每个用户可以有很多朋友 这个关系显然是对称的 如果用户A是用户B的朋友 那么用户B也是用户A的朋友 我只存储这个关系一次 除了两个用户 ID 之外 Friends 表还有其他字段 因此
  • 从字符串中删除识别的日期

    作为输入 我有几个包含不同格式日期的字符串 例如 彼得在16 45 我的生日是1990年7月8日 On 7 月 11 日星期六我会回家 I use dateutil parser parse识别字符串中的日期 在下一步中 我想从字符串中删除
  • 使用 on_bad_lines 将 pandas.read_csv 中的无效行写入文件

    我有一个 CSV 文件 我正在使用 Python 来解析该文件 我发现文件中的某些行具有不同的列数 001 Snow Jon 19801201 002 Crom Jake 19920103 003 Wise Frank 19880303 l
  • 使用 Tkinter 显示 numpy 数组中的图像

    我对 Python 缺乏经验 第一次使用 Tkinter 制作一个 UI 显示我的数字分类程序与 mnist 数据集的结果 当图像来自 numpy 数组而不是我的 PC 上的文件路径时 我有一个关于在 Tkinter 中显示图像的问题 我为
  • OpenCV 无法从 MacBook Pro iSight 捕获

    几天后 我无法再从 opencv 应用程序内部打开我的 iSight 相机 cap cv2 VideoCapture 0 返回 并且cap isOpened 回报true 然而 cap grab 刚刚返回false 有任何想法吗 示例代码
  • 绘制方程

    我正在尝试创建一个函数 它将绘制我告诉它的任何公式 import numpy as np import matplotlib pyplot as plt def graph formula x range x np array x rang
  • 从 Flask 访问 Heroku 变量

    我已经使用以下命令在 Heroku 配置中设置了数据库变量 heroku config add server xxx xxx xxx xxx heroku config add user userName heroku config add
  • 如何在Python中获取葡萄牙语字符?

    我正在研究葡萄牙语 角色看起来很奇怪 我怎样才能解决这个问题 代码 import feedparser import random Vou definir os feeds feeds conf feedurl http pplware s
  • Flask如何获取请求的HTTP_ORIGIN

    我想用我自己设置的 Access Control Allow Origin 标头做出响应 而弄清楚请求中的 HTTP ORIGIN 参数在哪里似乎很混乱 我在用着烧瓶 0 10 1 以及HTTP ORIGIN似乎是这个的特点之一object
  • Pandas:merge_asof() 对多行求和/不重复

    我正在处理两个数据集 每个数据集具有不同的关联日期 我想合并它们 但因为日期不完全匹配 我相信merge asof 是最好的方法 然而 有两件事发生merge asof 不理想的 数字重复 数字丢失 以下代码是一个示例 df a pd Da
  • 有没有办法检测正在运行的代码是否正在上下文管理器内执行?

    正如标题所述 有没有办法做到这样的事情 def call back if called inside context print running in context else print called outside context 这将
  • Conda SafetyError:文件大小不正确

    使用创建 Conda 环境时conda create n env name python 3 6 我收到以下警告 Preparing transaction done Verifying transaction SafetyError Th
  • 使用 Python 绘制 2D 核密度估计

    I would like to plot a 2D kernel density estimation I find the seaborn package very useful here However after searching
  • 使用其构造函数初始化 OrderedDict 以便保留初始数据的顺序的正确方法?

    初始化有序字典 OD 以使其保留初始数据的顺序的正确方法是什么 from collections import OrderedDict Obviously wrong because regular dict loses order d O
  • 导入错误:没有名为 site 的模块 - mac

    我已经有这个问题几个月了 每次我想获取一个新的 python 包并使用它时 我都会在终端中收到此错误 ImportError No module named site 我不知道为什么会出现这个错误 实际上 我无法使用任何新软件包 因为每次我
  • Python Selenium:如何在文本文件中打印网站上的值?

    我正在尝试编写一个脚本 该脚本将从 tulsaspca org 网站获取以下 6 个值并将其打印在 txt 文件中 最终输出应该是 905 4896 7105 23194 1004 42000 放置的动物 的 HTML span class

随机推荐

  • 脚本(自用)

    import pandas as pd import csv data1 pd read csv kong csv 必须添加header None 否则默认把第一行数据处理成列名导致缺失 data5 pd read csv kong11 c
  • Python中pass的作用

    空语句 do nothing 保证格式完整 保证语义完整 以if语句为例 在c或c java中 if true do nothing else do something 对应于python就要这样写 if true pass do noth
  • windows10域账号自动登录设置

    设置windows域账号自动登录 打开注册表regedit 打开HKEY LOCAL MACHINE SOFTWARE Microsoft Windows NT CurrentVersion Winlogon并设置AutoAdminLogo
  • Ecovadis审核之【4大模块 7项原则 21项标准议题】

    Ecovadis企业社会责任涵盖内容 评估标准 参考模型 Ecovadis认证审计 四大主题模块 1 环境 2 劳工与人权 3 商业道德 4 可持续采购 Ecovadis认证审计之21项企业社会责任 CSR 标准 当评估一个公司的企业社会责
  • MySQL中基于InnoDB引擎的锁

    共享锁和排他锁 InnoDB实现了标准的行级锁 共享锁和排他锁 共享锁允许持有锁的事务读取一行 排他锁允许持有锁的事务更新或者删除一行 如果一个事务T1持有对第r行的共享锁 那么对于其他不同事务T2对第r行的锁请求处理方法如下 T2对于共享
  • 【教程】HTML快速学习

    教程 html快速学习 备注 一 HTML概述 二 标签 tag 三 HTML格式 四 注释 根标签 头部标签 1 注释 2 根标签 3 常见头部标签 五 常见主体标签 1 文本标题标签 heading 2 段落标签 p 3 功能标签 4
  • C++实现生产者和消费者模型

    C 实现生产者和消费者模型 C 实现生产者和消费者模型 1 实现细节 2 单生产者 单消费者模型 3 单生产者 多消费者模型 4 多生产者 单消费者模型 5 多生产者 多消费者模型 参考 C 实现生产者和消费者模型 1 实现细节 具体的实现
  • QT 多界面跳转以及窗口之间参数传递

    一 模式 之前一直用的是c 由于最近要使用CC来二次开发 所以先熟悉一下QT 1 从一个界面跳到另外一个界面不需要返回 2 从一个界面跳到另外一个界面需要返回 1 新增主窗口 二 窗口跳转 需要返回 主窗口 void MainWindow
  • 微信小程序之支付操作步骤

    视频教程链接 https www bilibili com video BV1nE41117BQ p 100 spm id from pageDriver 微信支付官方文档链接 https developers weixin qq com
  • SpringCloud系列之五---集中配置组件Config+消息总线Bus

    文章目录 前言 集中配置组件SpringCloudConfig 1 SpringCloudConfig 简介 2 配置客户端 3 配置服务端 4 测试 消息总线 SpringCloudBus 1 配置客户端 2 配置服务端 3 测试 前言
  • vue(7)虚拟DOM和diff算法

    虚拟DOM 虚拟DOM vnode 简单点来说就是用JS对象来模拟DOM结构 表达方式 将每一个标签都转为一个对象 这个对象有三个属性 tag props children tag 标签 也可以是组件 props 标签上的属性和方法 chi
  • SpringSecurity用户认证设置用户名和密码的三种方式

    文章目录 SpringSecurity用户认证设置用户名和密码的三种方式 首先明白几个单词的意思 SpringSecurity默认的用户认证 1 通过配置文件进行用户认证 2 通过配置类进行用户认证 There is no Password
  • RTTI vs Reflection

    运行时类型识别与反射对于C 和Java这样的高级语言非常重要 需要注意的一点的是谨慎使用RTTI 因为它不符合OO 的可替换原则 1 What is RTTI By Run Time Type Identification RTTI we
  • 如何做好项目管理

    我把管理技能分为两类 分别为项目管理和团队管理 这篇文章教你如何做好项目管理 在讲述这篇文章前 先简单介绍一下我的管理经验 之前在百度呆了3年半 系统学习了百度的项目管理流程 19年来到小米后 带领ShareSave团队做了1年项目管理和团
  • 数据的储存

    欢迎来到布谷的博客 博客主页 布谷的首页 所属专栏 明解C语言 感谢你的点赞 评论 收藏 关注 一 整形在内存中的存储 原码 反码 补码 计算机中整数有三种二进制的表示方法 原码 反码 补码 整数的原反补码是相同的 而负数三者互不相同 整数
  • windows下的wsl-kail

    wsl2下的kali环境 首先在微软自带的应用商店安装Windows 终端 接着我们对Windows 终端进行基本的设置 启动默认为powershell 使用父进程目录 修改一下后背景图片 接着我们修改一下 bat文件的默认打开方式 打开注
  • Tomcat和Nginx的具体区别

    Tomcat和Nginx都是Web服务器 但它们的职责和功能有所不同 1 Tomcat是Java Web应用服务器 支持JSP和Servlet等Java Web开发技术 而Nginx是高性能的HTTP和反向代理服务器 2 Tomcat支持J
  • C 标准库 - 《string.h》

    原文链接 https www runoob com cprogramming c standard library string h html 简介 string h 头文件定义了一个变量类型 一个宏和各种操作字符数组的函数 库变量 下面是
  • Python进阶学习分享之循环设计

    range 在Python中 for循环后的in跟随一个序列的话 循环每次使用的序列元素 而不是序列的下标 之前我们已经使用过range 来控制for循环 现在 我们继续开发range的功能 以实现下标对循环的控制 S abcdefghij
  • python搭建HTTP服务器并外网访问 - 内网穿透

    1 前言 Python作为热度比较高的编程语言 其语法简单且语句清晰 而且python有良好的兼容性 可以轻松的和其他编程语言 比如C C 建立的模块连接起来 而且python丰富强大的库 经过封装可以轻松调用 因此深受欢迎 今天我们就尝试