文档章节

HTTPServer接收并保存图片或文件

o
 osc_g8254g7s
发布于 2019/08/19 19:14
字数 337
阅读 5
收藏 0

精选30+云产品,助力企业轻松上云!>>>

导入所需的库

from http.server import HTTPServer, BaseHTTPRequestHandler
import json
import socket
import cgi
from cgi import parse_header, parse_multipart
import urllib.request
import io,shutil
import re

创建Request类处理HTTP请求

class Resquest(BaseHTTPRequestHandler):
    def handler(self):
        print("data:", self.rfile.readline().decode())
        self.wfile.write(self.rfile.readline())

    def do_GET(self):        # 处理get请求
        print(self.requestline)
        if self.path != '/hello':
            self.send_error(404, "Page not Found!")
            return

        data = {
            'result_code': '1',
            'result_desc': 'Success',
            'timestamp': '',
            'data': {'message_id': 
                 '25d55ad283aa400af464c76d713c07ad'}
                        }
        self.send_response(200)
        self.send_header('Content-type', 'application/json')
        self.end_headers()
        self.wfile.write(json.dumps(data).encode())

    def do_POST(self):         # 处理post请求
        length = int(self.headers['content-length'])
        req_data = self.rfile.read(length)    # 读取所有http请求报文
        print(self.headers)        # 请求头信息
        print(self.command)      # 请求方式
        # 使用re解析出http请求中的图片,图片为字节类型
        # 图片数据需要去除httpserver加进去的form-data的边界线和文件的描述信息
        # 本例使用re去除boundary和文件描述的key:value  
        pattern1 = re.compile(b"-+\w*\s{2}(.*?\s{2}){2}\s{2}")
        pattern2 = re.compile(b"\s{2}-+.+\s{2}")
        res1 = re.match(pattern1, req_data)
        res2 = re.search(pattern2, req_data)
        file_data = req_data[res1.end():res2.start()]  

        # 将解析出的文件字节, 保存到本地
        with open("xx.jpg", "wb") as w:
            w.write(file_data)       

        data = {
                'result_code': '2',
                'result_desc': 'Success',
                'timestamp': '',
                'data': {'message_id': 
                            '25d55ad283aa400af464c76d713c07ad'}
                           }
        # 返回响应报文
        self.send_response(200)   # 响应行
        self.send_header('Content-type', 'application/json') # 响应头
        self.end_headers()  # 空行
        self.wfile.write(json.dumps(data).encode('utf-8'))   # 响应体                    

启动服务端

if __name__ == '__main__':
    host = ('127.0.0.1', 9002)
    server = HTTPServer(host, Resquest)
    print("Starting server, listen at: %s:%s" % host)
    server.serve_forever()

 

使用postman往服务器发图片

 

后台成功接收, 并保存图片

 

o
粉丝 0
博文 500
码字总数 0
作品 0
私信 提问
加载中
请先登录后再评论。

暂无文章

敖丙20 张图揭开内存管理的迷雾

前言 之前有不少读者跟我反馈,能不能写图解操作系统? 既然那么多读者想看,我最近就在疯狂的复习操作系统的知识。 操作系统确实是比较难啃的一门课,至少我认为比计算机网络难太多了,但它...

敖丙
07/02
15
0
拉勾网拉你上勾

预览 需求简介 拉勾网是一个互联网行业的一个招聘网站,上面有许多职位,于是乎,小编想提取指定职位的基本信息(职位名,薪水,工作经验,工作地点,教育背景),然后插入 MongoDB 数据库,...

木下瞳
2019/04/17
20
0
我是一个线程(第一人称)

来源 | 转自 码农翻身 作者 | 刘欣 全文总共 | 4600 字 预计阅读时间 | 12 分钟 第一回 初生牛犊 我是一个线程,我一出生就被编了个号:0x3704,然后被领到一个昏暗的屋子里,在这里我发现了...

geniusian
2019/11/04
18
0
SkyWalking 权限认证

版本:7.0.0 描述 为了数据传输安全,确保网络连接是安全的。采用 Token 认证确保采集的应用数据是被信任的。 当前版本,仅支持简单的字符串 Token 配置 代理端配置文件agent.config设置 # ...

zm123321
今天
17
0
是否允许实体正文进行HTTP DELETE请求? - Is an entity body allowed for an HTTP DELETE request?

问题: When issuing an HTTP DELETE request, the request URI should completely identify the resource to delete. 发出HTTP DELETE请求时,请求URI应该完全标识要删除的资源。 However,......

javail
昨天
27
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部