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单例模式实例分析
Jan 14 Python
python基于windows平台锁定键盘输入的方法
Mar 05 Python
python计算N天之后日期的方法
Mar 31 Python
Python Requests安装与简单运用
Apr 07 Python
Python3实现的Mysql数据库操作封装类
Jun 06 Python
对Python 多线程统计所有csv文件的行数方法详解
Feb 12 Python
Python中判断子串存在的性能比较及分析总结
Jun 23 Python
python文档字符串(函数使用说明)使用详解
Jul 30 Python
基于python实现微信好友数据分析(简单)
Feb 16 Python
Python如何批量获取文件夹的大小并保存
Mar 31 Python
基于Pytorch版yolov5的滑块验证码破解思路详解
Feb 25 Python
Python利用Turtle绘制哆啦A梦和小猪佩奇
Apr 04 Python
安装pytorch时报sslerror错误的解决方案
Pytorch 如何实现LSTM时间序列预测
pytorch实现ResNet结构的实例代码
pytorch常用数据类型所占字节数对照表一览
May 17 #Python
python使用tkinter实现透明窗体上绘制随机出现的小球(实例代码)
Python编写可视化界面的全过程(Python+PyCharm+PyQt)
Pytorch 实现变量类型转换
You might like
Base64在线编码解码实现代码 演示与下载
2011/01/08 PHP
php入门学习知识点二 PHP简单的分页过程与原理
2011/07/14 PHP
PHP 面向对象程序设计(oop)学习笔记(三) - 单例模式和工厂模式
2014/06/12 PHP
php广告加载类用法实例
2014/09/23 PHP
PHP实现PDO的mysql数据库操作类
2014/12/12 PHP
PHP SPL标准库之数据结构栈(SplStack)介绍
2015/05/12 PHP
php删除数组指定元素实现代码
2017/05/03 PHP
js电信网通双线自动选择技巧
2008/11/18 Javascript
Node.js生成HttpStatusCode辅助类发布到npm
2013/04/09 Javascript
用客户端js实现带省略号的分页
2013/04/27 Javascript
js和jquery使按钮失效为不可用状态的方法
2014/01/26 Javascript
基于javascript实现浏览器滚动条快到底部时自动加载数据
2015/11/30 Javascript
JS判断Android、iOS或浏览器的多种方法(四种方法)
2017/06/29 Javascript
AngularJS自定义过滤器用法经典实例总结
2018/05/17 Javascript
vue实现购物车结算功能
2020/06/18 Javascript
es5 类与es6中class的区别小结
2020/11/09 Javascript
关于vue 项目中浏览器跨域的配置问题
2020/11/10 Javascript
[06:33]DOTA2亚洲邀请赛小组赛第二日 TOP10精彩集锦
2015/01/31 DOTA
[01:14:41]DOTA2-DPC中国联赛定级赛 iG vs Magma BO3第一场 1月8日
2021/03/11 DOTA
python多线程threading.Lock锁用法实例
2014/11/01 Python
对于Python中RawString的理解介绍
2016/07/07 Python
Jupyter Notebook远程登录及密码设置操作
2020/04/10 Python
Keras设置以及获取权重的实现
2020/06/19 Python
一篇文章带你学习CSS3图片边框
2020/11/04 HTML / CSS
毕业生自我推荐
2013/11/04 职场文书
市政施工员自我鉴定
2014/01/15 职场文书
信息技术专业大学生职业生涯规划书
2014/01/24 职场文书
网络编辑岗位职责范本
2014/02/10 职场文书
体操比赛口号
2014/06/10 职场文书
生活小常识广播稿
2014/09/16 职场文书
运动会广播稿200字(10篇)
2014/10/12 职场文书
莫言诺贝尔获奖感言(全文)
2015/07/31 职场文书
小公司融资,商业计划书的8切记
2019/07/15 职场文书
Python3 多线程(连接池)操作MySQL插入数据
2021/06/09 Python
一文搞懂python异常处理、模块与包
2021/06/26 Python
基于redis+lua进行限流的方法
2022/07/23 Redis