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专用方法与迭代机制实例分析
Sep 15 Python
python通过加号运算符操作列表的方法
Jul 28 Python
python生成器,可迭代对象,迭代器区别和联系
Feb 04 Python
python实现音乐下载的统计
Jun 20 Python
Python爬虫实现爬取百度百科词条功能实例
Apr 05 Python
python tkinter canvas 显示图片的示例
Jun 13 Python
python实现代码统计程序
Sep 19 Python
tensorflow:指定gpu 限制使用量百分比,设置最小使用量的实现
Feb 06 Python
Python单链表原理与实现方法详解
Feb 22 Python
Python 将 QQ 好友头像生成祝福语的实现代码
May 03 Python
tensorflow实现残差网络方式(mnist数据集)
May 26 Python
Python3使用Selenium获取session和token方法详解
Feb 16 Python
安装pytorch时报sslerror错误的解决方案
Pytorch 如何实现LSTM时间序列预测
pytorch实现ResNet结构的实例代码
pytorch常用数据类型所占字节数对照表一览
May 17 #Python
python使用tkinter实现透明窗体上绘制随机出现的小球(实例代码)
Python编写可视化界面的全过程(Python+PyCharm+PyQt)
Pytorch 实现变量类型转换
You might like
图形数字验证代码
2006/10/09 PHP
提升PHP执行速度全攻略
2006/10/09 PHP
在smarty中调用php内置函数的方法
2013/02/07 PHP
php管理nginx虚拟主机shell脚本实例
2014/11/19 PHP
php中array_unshift()修改数组key注意事项分析
2016/05/16 PHP
Yii2 如何在modules中添加验证码的方法
2017/06/19 PHP
PHP 断点续传实例详解
2017/11/11 PHP
jquery下json数组的操作实现代码
2010/08/09 Javascript
JavaScript与ActionScript3两者的同性与差异性
2016/09/22 Javascript
将json转换成struts参数的方法
2016/11/08 Javascript
Bootstrap基本插件学习笔记之按钮(21)
2016/12/08 Javascript
jQuery validate 验证radio实例
2017/03/01 Javascript
Angularjs使用指令做表单校验的方法
2017/03/31 Javascript
详解AngularJS controller调用factory
2017/05/19 Javascript
微信小程序视图容器(swiper)组件创建轮播图
2020/06/19 Javascript
解决pycharm py文件运行后停止按钮变成了灰色的问题
2018/11/29 Python
Linux下Pycharm、Anaconda环境配置及使用踩坑
2018/12/19 Python
Django 中间键和上下文处理器的使用
2019/03/17 Python
python3+PyQt5 数据库编程--增删改实例
2019/06/17 Python
深入了解Django View(视图系统)
2019/07/23 Python
Python generator生成器和yield表达式详解
2019/08/08 Python
tensorflow 实现自定义layer并添加到计算图中
2020/02/04 Python
详解Python中pyautogui库的最全使用方法
2020/04/01 Python
python 实现任务管理清单案例
2020/04/25 Python
Pycharm操作Git及GitHub的步骤详解
2020/10/27 Python
python 实现有道翻译功能
2021/02/26 Python
意大利一家专营包包和配饰的网上商店:Borse Last Minute
2019/08/26 全球购物
美国亚马逊旗下时尚女装网店:SHOPBOP(支持中文)
2020/10/17 全球购物
大学毕业生通用自我评价
2014/01/05 职场文书
蜜蜂引路教学反思
2014/02/04 职场文书
综合办公室主任岗位职责
2014/04/13 职场文书
2014年学雷锋活动总结
2014/06/26 职场文书
大四毕业生自荐书
2014/07/05 职场文书
党风廉政建设心得体会(2016最新版)
2016/01/22 职场文书
教你使用Python pypinyin库实现汉字转拼音
2021/05/27 Python
SpringCloud Feign请求头删除修改的操作代码
2022/03/20 Java/Android