Python3 如何开启自带http服务


Posted in Python onMay 18, 2021

开启Web服务

1.基本方式

Python中自带了简单的服务器程序,能较容易地打开服务。

在python3中将原来的SimpleHTTPServer命令改为了http.server,使用方法如下:

1. cd www目录

2. python -m http.server

开启成功,则会输出“Serving HTTP on 0.0.0.0 port 8000 (http://0.0.0.0:8000/) …”,表示在本机8000端口开启了服务。

如果需要后台运行,可在命令后加"&"符号,Ctrl+C不会关闭服务,如下:

python -m http.server &

如果要保持服务,则在命令前加nohup以忽略所有挂断信号,如下:

nohup python -m http.server 8001

2.指定端口

如果不使用默认端口,可在开启时附带端口参数,如:

python -m http.server 8001

则会在8001端口打开http服务。

使用Web服务

可以使用http://0.0.0.0:8000/查看www目录下的网页文件,若无index.html则会显示目录下的文件。

也可以使用ifconfig命令查看本机IP并使用。

补充:python创建http服务

背景

用java调用dll的时候经常出现 invalid memory access,改用java-Python-dll,

Python通过http服务给java提供功能。

环境

Python3.7

通过 http.server.BaseHTTPRequestHandler 来处理请求,并返回response

打印日志

filename为输入日志名称,默认是同目录下,没有该文件会新创建

filemode a 是追加写的模式,w是覆盖写

import logging
logging.basicConfig(
    level=logging.INFO,
    format='%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s %(message)s',
    filename="hhh.txt",
    filemode='a'
)
logging.info("xxxx")

调用dll

pchar - ctypes.c_char_p

integer 用了 bytes(0),byref(ctypes.c_void_p(0)) 都OK,没有更深入去研究,如有错误请指正。

import ctypes
from ctypes import *
dll = ctypes.windll.LoadLibrary('C:\\xxx\\xxx.dll')
print("dll版本号为 : "+ str(dll.GetVersion()) )
 name = ctypes.c_char_p(b"gc")
            roomno = ctypes.c_char_p(bytes(room.encode("utf-8")))
            begintime = ctypes.c_char_p(bytes(begin.encode("utf-8")))
            endtime = ctypes.c_char_p(bytes(end.encode("utf-8")))
            cardno = ctypes.c_void_p(0)
            dll.invoke...

http方案一

要注意 必须有 response = response_start_line + response_headers + “\r\n” + response_body

拼接应答报文后,才能给浏览器正确返回

# coding:utf-8
import socket
from multiprocessing import Process
def handle_client(client_socket):
    # 获取客户端请求数据
    request_data = client_socket.recv(1024)
    print("request:", request_data)
    # 构造响应数据
    response_start_line = "HTTP/1.1 200 OK\r\n"
    response_headers = "Server: My server\r\n"
    response_body = "helloWorld!"
    response = response_start_line + response_headers + "\r\n" + response_body
    print("response:", response)
    # 向客户端返回响应数据
    client_socket.send(bytes(response, "utf-8"))
    # 关闭客户端连接
    client_socket.close()
if __name__ == "__main__":
    server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    server_socket.bind(("", 8888))
    server_socket.listen(120)
    print("success")
    while True:
        client_socket, client_address = server_socket.accept()
        print("[%s, %s]用户连接上了" % client_address)
        handle_client_process = Process(target=handle_client, args=(client_socket,))
        handle_client_process.start()
        client_socket.close()

完整代码

另外一种http方式

#-.- coding:utf-8 -.-
from http.server import  HTTPServer
import ctypes
from ctypes import *
# HTTPRequestHandler class
import http.server
import socketserver
import logging
# pyinstaller -F
class testHTTPServer_RequestHandler(http.server.BaseHTTPRequestHandler):
    # GET
  def do_GET(self):
        logging.error('start make ')
        str2 =  str(self.path)
        print("revice: " + str2)
        if "xxx" in str2:
            # todo 你的具体业务操作
               
            if "xxx" in str2:
                print("hahaha")
                logging.error('hahaha')
                # response_body = "0"
                self.send_response(200)
                # Send headers
                self.send_header('Content-type','text/html')
                self.end_headers()
                # Send message back to client
                message = "Hello world!"
                # Write content as utf-8 data
                self.wfile.write(bytes(message, "utf8"))
                return
        else:
            print("1else")
            self.send_response(200)
            # Send headers
            self.send_header('Content-type', 'text/html')
            self.end_headers()
            # Send message back to client
            message = "Hello world222333!"
            # Write content as utf-8 data
            self.wfile.write(bytes(message, "utf8"))
            return
            
def run():
  print('starting server...')
  logging.basicConfig(
      level=logging.INFO,
      format='%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s %(message)s',
      filename="http_make_card.txt",
      filemode='a+'
  )
  # Server settings
  server_address = ('127.0.0.1', 8888)
  httpd = HTTPServer(server_address, testHTTPServer_RequestHandler)
  print('running server...')
  httpd.serve_forever()
run()

打包exe

pip install pyinstaller

pyinstaller -F xxx.py 即可,当前目录下生成

1、No module named ‘http.server'; ‘http' is not a package

当时自己建了一个py叫http,删掉后正常

2、UnicodeDecodeError: ‘utf-8' codec can't decode byte 0xce in position 130: invalid continuat

另存为utf-8即可

Python3 如何开启自带http服务

以上为个人经验,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python设置默认编码为utf8的方法
Jul 01 Python
python添加模块搜索路径方法
Sep 11 Python
PyTorch上实现卷积神经网络CNN的方法
Apr 28 Python
对numpy中向量式三目运算符详解
Oct 31 Python
基于Numpy.convolve使用Python实现滑动平均滤波的思路详解
May 16 Python
浅谈Python类中的self到底是干啥的
Nov 11 Python
Python超越函数积分运算以及绘图实现代码
Nov 20 Python
python 消除 futureWarning问题的解决
Dec 25 Python
基于K.image_data_format() == 'channels_first' 的理解
Jun 29 Python
Pytest测试框架基本使用方法详解
Nov 25 Python
Python基于execjs运行js过程解析
Nov 27 Python
python基于机器学习预测股票交易信号
May 25 Python
安装pytorch时报sslerror错误的解决方案
Pytorch 如何实现LSTM时间序列预测
pytorch实现ResNet结构的实例代码
pytorch常用数据类型所占字节数对照表一览
May 17 #Python
python使用tkinter实现透明窗体上绘制随机出现的小球(实例代码)
Python编写可视化界面的全过程(Python+PyCharm+PyQt)
Pytorch 实现变量类型转换
You might like
php实现屏蔽掉黑帽SEO的搜索关键字
2015/04/15 PHP
PHP抓取及分析网页的方法详解
2016/04/26 PHP
让插入到 innerHTML 中的 script 跑起来的实现代码
2006/07/01 Javascript
JavaScript Date对象 日期获取函数
2010/12/19 Javascript
分享10篇优秀的jQuery幻灯片制作教程及应用案例
2011/04/16 Javascript
jquery实现兼容浏览器的图片上传本地预览功能
2013/10/14 Javascript
JS关闭窗口与JS关闭页面的几种方法小结
2013/12/17 Javascript
JavaScript中的Math 使用介绍
2014/04/21 Javascript
JS使用oumousemove和oumouseout动态改变图片显示的方法
2015/03/31 Javascript
Jquery1.9.1源码分析系列(十五)动画处理之外篇
2015/12/04 Javascript
原生js实现自由拖拽弹窗代码demo
2016/06/29 Javascript
Select2.js下拉框使用小结
2016/10/24 Javascript
微信小程序联网请求的轮播图
2017/07/07 Javascript
详解webpack4升级指南以及从webpack3.x迁移
2018/06/12 Javascript
vue2.0 + ele的循环表单及验证字段方法
2018/09/18 Javascript
微信小程序在地图选择地址并返回经纬度简单示例
2018/12/03 Javascript
浅谈在Vue.js中如何实现时间转换指令
2019/01/06 Javascript
前后端常见的几种鉴权方式(小结)
2019/08/04 Javascript
[01:20:06]TNC vs VG 2018国际邀请赛小组赛BO2 第二场 8.16
2018/08/17 DOTA
Python 异常处理实例详解
2014/03/12 Python
python编写的最短路径算法
2015/03/25 Python
Python中functools模块的常用函数解析
2016/06/30 Python
python如何修改装饰器中参数
2018/03/20 Python
Python实现购物车程序
2018/04/16 Python
Python实现曲线拟合操作示例【基于numpy,scipy,matplotlib库】
2018/07/12 Python
python用for循环求和的方法总结
2019/07/08 Python
python实现的读取网页并分词功能示例
2019/10/29 Python
pygame编写音乐播放器的实现代码示例
2019/11/19 Python
澳大利亚一站式数码相机商店:CameraPro
2020/03/09 全球购物
如何利用cmp命令比较文件
2013/09/23 面试题
应届生法律顾问求职信
2013/11/19 职场文书
客户服务经理岗位职责
2014/01/29 职场文书
区域经理岗位职责
2015/02/02 职场文书
婚宴来宾致辞
2015/07/28 职场文书
酒店员工管理制度
2015/08/05 职场文书
导游词之峨眉山
2019/12/16 职场文书