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中子类继承父类的__init__方法实例
Dec 15 Python
Python实现的爬虫功能代码
Jun 24 Python
python实现ID3决策树算法
Dec 20 Python
python实现对指定输入的字符串逆序输出的6种方法
Apr 26 Python
python生成每日报表数据(Excel)并邮件发送的实例
Feb 03 Python
详解Python下载图片并保存本地的两种方式
May 15 Python
Django的性能优化实现解析
Jul 30 Python
python中的反斜杠问题深入讲解
Aug 12 Python
python-xpath获取html文档的部分内容
Mar 06 Python
python 使用递归的方式实现语义图片分割功能
Jul 16 Python
python爬虫爬取淘宝商品比价(附淘宝反爬虫机制解决小办法)
Dec 03 Python
python 如何在list中找Topk的数值和索引
May 20 Python
安装pytorch时报sslerror错误的解决方案
Pytorch 如何实现LSTM时间序列预测
pytorch实现ResNet结构的实例代码
pytorch常用数据类型所占字节数对照表一览
May 17 #Python
python使用tkinter实现透明窗体上绘制随机出现的小球(实例代码)
Python编写可视化界面的全过程(Python+PyCharm+PyQt)
Pytorch 实现变量类型转换
You might like
浅析虚拟主机服务器php fsockopen函数被禁用的解决办法
2013/08/07 PHP
php实现统计网站在线人数的方法
2015/05/12 PHP
PHP编写简单的App接口
2016/08/28 PHP
[原创]PHP获取数组表示的路径方法分析【数组转字符串】
2017/09/01 PHP
30个最好的jQuery 灯箱插件分享
2011/04/25 Javascript
JQuery通过Ajax提交表单并返回结果
2011/07/31 Javascript
js实现幻灯片播放图片示例代码
2013/11/07 Javascript
jQuery学习笔记之toArray()
2014/06/09 Javascript
点击A元素触发B元素的事件在IE8下会识别成A元素
2014/09/04 Javascript
AngularJs篇:使用AngularJs打造一个简易权限系统的实现代码
2016/12/26 Javascript
移动设备手势事件库Touch.js使用详解
2017/08/18 Javascript
浅谈Angular6的服务和依赖注入
2018/06/27 Javascript
Nuxt.js实现校验访问浏览器类型的中间件
2018/08/24 Javascript
Angularjs之ngModel中的值验证绑定方法
2018/09/13 Javascript
微信小程序实现简易table表格
2020/06/19 Javascript
python数据结构链表之单向链表(实例讲解)
2017/07/25 Python
pycharm的console输入实现换行的方法
2019/01/16 Python
Python使用字典的嵌套功能详解
2019/02/27 Python
Django {{ MEDIA_URL }}无法显示图片的解决方式
2020/04/07 Python
python实现经典排序算法的示例代码
2021/02/07 Python
俄罗斯品牌服装在线商店:VIPAVENUE
2020/08/10 全球购物
写好求职信第一句话的技巧
2013/10/26 职场文书
管理建议书范文
2014/05/13 职场文书
小学优秀班集体申报材料
2014/05/25 职场文书
物理学专业求职信
2014/07/04 职场文书
甜品蛋糕店创业计划书
2014/09/21 职场文书
党员群众路线教育实践活动学习笔记
2014/11/05 职场文书
学生逃课检讨书
2015/02/17 职场文书
小学推普周活动总结
2015/05/07 职场文书
退休欢送会主持词
2015/07/01 职场文书
2015初中教导处工作总结
2015/07/21 职场文书
2016年幼儿园万圣节活动总结
2016/04/05 职场文书
深入理解java.lang.String类的不可变性
2021/06/27 Java/Android
使用GO语言实现Mysql数据库CURD的简单示例
2021/08/07 Golang
MySQL的存储函数与存储过程的区别解析
2022/04/08 MySQL
SQLServer常见数学函数梳理总结
2022/08/05 MySQL