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 for循环的巧妙运用(迭代、列表生成式)
Sep 26 Python
Python实现将json文件中向量写入Excel的方法
Mar 26 Python
如何优雅地处理Django中的favicon.ico图标详解
Jul 05 Python
python opencv人脸检测提取及保存方法
Aug 03 Python
python实时获取外部程序输出结果的方法
Jan 12 Python
python opencv判断图像是否为空的实例
Jan 26 Python
python函数装饰器之带参数的函数和带参数的装饰器用法示例
Nov 06 Python
Python Django2.0集成Celery4.1教程
Nov 19 Python
浅谈Python3实现两个矩形的交并比(IoU)
Jan 18 Python
python在不同条件下的输入与输出
Feb 13 Python
pytorch实现MNIST手写体识别
Feb 14 Python
Python执行时间的几种计算方法
Jul 31 Python
安装pytorch时报sslerror错误的解决方案
Pytorch 如何实现LSTM时间序列预测
pytorch实现ResNet结构的实例代码
pytorch常用数据类型所占字节数对照表一览
May 17 #Python
python使用tkinter实现透明窗体上绘制随机出现的小球(实例代码)
Python编写可视化界面的全过程(Python+PyCharm+PyQt)
Pytorch 实现变量类型转换
You might like
php中get_cfg_var()和ini_get()的用法及区别
2015/03/04 PHP
PHP文件缓存类实现代码
2015/10/26 PHP
解决ThinkPHP下使用上传插件Uploadify浏览器firefox报302错误的方法
2015/12/18 PHP
PHP反射机制原理与用法详解
2017/02/15 PHP
tp5(thinkPHP5)框架连接数据库的方法示例
2018/12/24 PHP
文本框中,回车键触发事件的js代码[多浏览器兼容]
2010/06/07 Javascript
文本框根据输入内容自适应高度的代码
2011/10/24 Javascript
jquery如何改变html标签的样式(两种实现方法)
2013/01/16 Javascript
用js传递value默认值的示例代码
2014/09/11 Javascript
超详细的javascript数组方法汇总
2015/11/21 Javascript
浅谈jQuery为哪般去掉了浏览器检测
2016/08/29 Javascript
Node.js数据库操作之连接MySQL数据库(一)
2017/03/04 Javascript
利用Node.js对文件进行重命名
2017/03/12 Javascript
Vue2.0 多 Tab切换组件的封装实例
2017/07/28 Javascript
使用vs code开发Nodejs程序的使用方法
2017/09/21 NodeJs
pace.js和NProgress.js两个加载进度插件的一点小总结
2018/01/31 Javascript
bootstrap-table实现表头固定以及列固定的方法示例
2019/03/07 Javascript
Python正则表达式匹配HTML页面编码
2015/04/08 Python
Python中的测试模块unittest和doctest的使用教程
2015/04/14 Python
Anaconda入门使用总结
2018/04/05 Python
对python3 一组数值的归一化处理方法详解
2018/07/11 Python
python使用pygame模块实现坦克大战游戏
2020/03/25 Python
在Python IDLE 下调用anaconda中的库教程
2020/03/09 Python
pyMySQL SQL语句传参问题,单个参数或多个参数说明
2020/06/06 Python
美国奢侈品在线团购网站:Gilt City
2017/11/16 全球购物
如何写一个自定义标签
2012/12/28 面试题
自荐信包含哪些内容
2013/10/30 职场文书
财务主管的岗位职责
2013/12/30 职场文书
高三学习决心书
2014/03/11 职场文书
倡议书格式模板
2014/05/13 职场文书
教师聘用意向书
2015/05/11 职场文书
2015年语文教师工作总结
2015/05/25 职场文书
红色经典电影观后感
2015/06/18 职场文书
Nginx实现负载均衡的项目实践
2022/03/18 Servers
Win10系统搭建ftp文件服务器详细教程
2022/08/05 Servers
MySQL远程无法连接的一些常见原因总结
2022/09/23 MySQL