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 相关文章推荐
基于Django的python验证码(实例讲解)
Oct 23 Python
python爬取亚马逊书籍信息代码分享
Dec 09 Python
selenium python浏览器多窗口处理代码示例
Jan 15 Python
centos6.8安装python3.7无法import _ssl的解决方法
Sep 17 Python
使用Python获取网段IP个数以及地址清单的方法
Nov 01 Python
使用Python批量修改文件名的代码实例
Jan 24 Python
Python可变参数会自动填充前面的默认同名参数实例
Nov 18 Python
Python 生成一个从0到n个数字的列表4种方法小结
Nov 28 Python
python扫描线填充算法详解
Feb 19 Python
Python双链表原理与实现方法详解
Feb 22 Python
解决pyecharts运行后产生的html文件用浏览器打开空白
Mar 11 Python
详解Selenium-webdriver绕开反爬虫机制的4种方法
Oct 28 Python
安装pytorch时报sslerror错误的解决方案
Pytorch 如何实现LSTM时间序列预测
pytorch实现ResNet结构的实例代码
pytorch常用数据类型所占字节数对照表一览
May 17 #Python
python使用tkinter实现透明窗体上绘制随机出现的小球(实例代码)
Python编写可视化界面的全过程(Python+PyCharm+PyQt)
Pytorch 实现变量类型转换
You might like
php与php MySQL 之间的关系
2009/07/17 PHP
PHP 引用文件技巧
2010/03/02 PHP
深入php中var_dump方法的使用详解
2013/06/24 PHP
PHP系统命令函数使用分析
2013/07/05 PHP
PHP生成自适应大小的缩略图类及使用方法分享
2014/05/06 PHP
PHP中new static()与new self()的区别异同分析
2014/08/22 PHP
Zend Framework教程之Zend_Controller_Plugin插件用法详解
2016/03/07 PHP
PHP简单实现无限级分类的方法
2016/05/13 PHP
php微信开发之百度天气预报
2016/11/18 PHP
PHP实现简单ajax Loading加载功能示例
2016/12/28 PHP
juqery 学习之四 筛选过滤
2010/11/30 Javascript
js控制分页打印、打印分页示例
2014/02/08 Javascript
jQuery插件datepicker 日期连续选择
2015/06/12 Javascript
JavaScript学习小结(7)之JS RegExp
2015/11/29 Javascript
想用好React的你必须要知道的一些事情
2017/07/24 Javascript
cordova入门基础教程及使用中遇到的一些问题总结
2017/11/14 Javascript
js使用Promise实现简单的Ajax缓存
2018/11/14 Javascript
vue 中 elment-ui table合并上下两行相同数据单元格
2019/12/26 Javascript
JS基础之逻辑结构与循环操作示例
2020/01/19 Javascript
浅谈vue中使用编辑器vue-quill-editor踩过的坑
2020/08/03 Javascript
[01:04:14]VP vs TNC 2018国际邀请赛小组赛BO2 第二场 8.17
2018/08/20 DOTA
Python 执行字符串表达式函数(eval exec execfile)
2014/08/11 Python
浅谈python中统计计数的几种方法和Counter详解
2019/11/07 Python
django 模型中的计算字段实例
2020/05/19 Python
CSS 3.0 结合video视频实现的创意开幕效果
2020/06/01 HTML / CSS
HTML5 transform三维立方体实现360无死角三维旋转效果
2014/08/22 HTML / CSS
Microsoft新加坡官方网站:购买微软最新软件和技术产品
2016/10/28 全球购物
wedgwood加拿大官网:1759年成立的英国国宝级陶瓷餐具品牌
2018/07/17 全球购物
英国家电购物网站:Sonic Direct
2019/03/26 全球购物
马来西亚在线健康商店:Medipal Malaysia
2020/04/13 全球购物
幼儿教师思想汇报
2014/01/10 职场文书
药学职务聘任书
2014/03/29 职场文书
《理想的风筝》教学反思
2014/04/11 职场文书
大学生活动总结怎么写
2014/04/29 职场文书
2015年勤工助学工作总结
2015/04/29 职场文书
只用Python就可以制作的简单词云
2021/06/07 Python