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脚本
Feb 10 Python
Python爬虫抓取手机APP的传输数据
Jan 22 Python
插入排序_Python与PHP的实现版(推荐)
May 11 Python
python实现外卖信息管理系统
Jan 11 Python
Python使用Windows API创建窗口示例【基于win32gui模块】
May 09 Python
python学生信息管理系统(完整版)
Apr 05 Python
详解Python3网络爬虫(二):利用urllib.urlopen向有道翻译发送数据获得翻译结果
May 07 Python
Python实现将字符串的首字母变为大写,其余都变为小写的方法
Jun 11 Python
python连接、操作mongodb数据库的方法实例详解
Sep 11 Python
你可能不知道的Python 技巧小结
Jan 29 Python
如何使用Python提取Chrome浏览器保存的密码
Jun 09 Python
python机器学习创建基于规则聊天机器人过程示例详解
Nov 02 Python
安装pytorch时报sslerror错误的解决方案
Pytorch 如何实现LSTM时间序列预测
pytorch实现ResNet结构的实例代码
pytorch常用数据类型所占字节数对照表一览
May 17 #Python
python使用tkinter实现透明窗体上绘制随机出现的小球(实例代码)
Python编写可视化界面的全过程(Python+PyCharm+PyQt)
Pytorch 实现变量类型转换
You might like
php 获取select下拉列表框的值
2010/05/08 PHP
php实现的XML操作(读取)封装类完整实例
2017/02/23 PHP
漂亮的提示信息(带箭头)
2007/03/21 Javascript
js数字输入框(包括最大值最小值限制和四舍五入)
2009/11/24 Javascript
Fixie.js 自动填充内容的插件
2012/06/28 Javascript
js计算字符串长度包含的中文是utf8格式
2013/10/15 Javascript
node.js中的fs.fchmod方法使用说明
2014/12/16 Javascript
JavaScript实现的链表数据结构实例
2015/04/02 Javascript
js+ajax实现获取文件大小的方法
2015/12/08 Javascript
jQuery实现多级联动下拉列表查询框
2016/01/18 Javascript
AngularJS在IE8的不支持的解决方法
2016/05/13 Javascript
微信小程序侧边栏滑动特效(左右滑动)
2017/01/23 Javascript
Vue.js如何优雅的进行form validation
2017/04/07 Javascript
详解vue 自定义marquee无缝滚动组件
2019/04/09 Javascript
Vue.js构建你的第一个包并在NPM上发布的方法步骤
2019/05/01 Javascript
vue中el-input绑定键盘按键(按键修饰符)
2020/07/22 Javascript
[02:30]联想杯DOTA2完美世界全国高校联赛—北京站现场
2015/11/16 DOTA
[03:55]TI9战队采访——TNC Predator
2019/08/22 DOTA
[01:50:49]DOTA2-DPC中国联赛 正赛 PSG.LGD vs Aster BO3 第三场 1月24日
2021/03/11 DOTA
Python竟能画这么漂亮的花,帅呆了(代码分享)
2017/11/15 Python
django自带的server 让外网主机访问方法
2018/05/14 Python
Python中单线程、多线程和多进程的效率对比实验实例
2019/05/14 Python
pytorch数据预处理错误的解决
2020/02/20 Python
python GUI库图形界面开发之PyQt5布局控件QGridLayout详细使用方法与实例
2020/03/06 Python
python3 deque 双向队列创建与使用方法分析
2020/03/24 Python
keras 多任务多loss实例
2020/06/22 Python
Python自动创建Excel并获取内容
2020/09/16 Python
几个解决兼容IE6\7\8不支持html5标签的几个方法
2013/01/07 HTML / CSS
HTML5制作酷炫音频播放器插件图文教程
2014/12/30 HTML / CSS
德国W家官网,可直邮中国的母婴商城:Windeln.de
2021/03/03 全球购物
网络教育自我鉴定
2013/11/01 职场文书
媒体宣传策划方案
2014/05/25 职场文书
颐和园导游词400字
2015/01/30 职场文书
大学运动会加油稿
2015/07/22 职场文书
环保建议书作文300字
2015/09/14 职场文书
2019年恭贺升学祝福语集锦
2019/08/15 职场文书