复制即用-python-[requests+httpServer]实现get, post, 发文件, 反馈文件等功能.

复制即用-python-[requests+httpServer]实现get, post, 发文件, 反馈文件等功能.

声明

所有方法都是最简最快速实现的核心代码,拿来就可以基本实现功能.
实际应用的话自己搞好异常处理.

代码

环境需求

# 客户端
# pip install requests
# pip install requests_toolbelt 
import requests
from requests_toolbelt import MultipartEncoder
# 服务端
import cgi
import json
from http.server import HTTPServer, BaseHTTPRequestHandler

发送及接收get请求

# 发送端
def send_get():
    """ 发送get测试命令 """
    response = requests.get('http://localhost:8888/get', verify=False)
    print(response.text)
# 接收端
def get_test(self):
     """ get命令的测试 """
     self.send_response(200)
     self.send_header('Content-type', 'application/json')
     self.end_headers()
     rspstr = json.dumps(data)
     self.wfile.write(rspstr.encode("utf-8"))

发送及接收post请求

# 发送端
def send_post():
    """ 发送post测试命令 (注意数据格式是key1=1001的,不能用json在接收端直接解析)"""
    payload_dict = {'key1':1001, 'key2':'测试信息', 'key3': ['value1', 'value2']}
    response = requests.post('http://localhost:8888/post', data=payload_dict)
    print(response.text)

def send_json_post():
    """ 发送post测试命令 json格式 """
    payload_dict = {'key1': 1001, 'key2': '测试信息', 'key3': ['value1', 'value2']}
    response = requests.post('http://localhost:8888/post', json=payload_dict)
    print(response.text)
# 接收端
def post_test(self):
    """ post命令的测试 """
    data_byte = self.rfile.read(int(self.headers["content-length"]))
    data_obj = json.loads(str(data_byte, encoding = "utf-8"))
    print("获取到的请求命令为:", data_obj)
    self.send_response(200)
    self.send_header("Content-type", 'application/json')
    self.end_headers()
    rspstr = json.dumps(data)
    self.wfile.write(rspstr.encode("utf-8"))

发送携带参数与文件的multipart/form-data请求

# 发送端
def send_picture_json_post():
    """ 同时发送参数及图像数据的multipart/form-data请求 """
    url = "http://localhost:8888/postparamfile"
    file_path = './images/test.jpg'
    m = MultipartEncoder(
        fields={"isNotKCode": "Y",
                "fromCode": "啦啦啦啦啦",
                "fromName": "鸡鸡歪歪!",
                "sendName": "asdfas",
                "sendMobile": "18526363636",
                "sendPhone": "",
                "sendAddress": "e5632452542345",
                "uploadType": "1",
                "fileType": "3",
                "file": (file_path, open(file_path, 'rb'), 'application/vnd.ms-excel', {'Expires': '0'})
                }
    )
    response = requests.post(url, data=m, headers={"Content-Type": m.content_type, "jwt-token": "KYkmsPDBk"})
    print(response.text)
# 接收端
def post_picture_param(self):
    """ 同时携带参数及文件的 multipart/form-data 请求 """
    form = cgi.FieldStorage(
        fp=self.rfile,
        headers=self.headers,
        environ={'REQUEST_METHOD': 'POST',
                 'CONTENT_TYPE': self.headers['Content-Type'],
                 }
    )

    # 接收并保存图片
    for field in form.keys():
        if str(field) != 'file':
            field_item = form[field]
            filevalue = field_item.value
            print(field, filevalue)
        else:
            field_item = form[field]
            filename = field_item.filename
            filevalue = field_item.value
            filesize = len(filevalue)  # 文件大小(字节)
            print(filename, filesize)
            with open("./images/saved.jpg", 'wb') as f:
                f.write(filevalue)

    # 给出一个反馈
    self.send_response(200)
    self.send_header("Content-type", 'application/json')
    self.end_headers()
    rspstr = json.dumps(data)
    self.wfile.write(rspstr.encode("utf-8"))

发送请求获取图像

# 发送端
def send_back_file_post():
    """ 发送一个请求图像命令,反馈一张图片 """
    # 这是一个图片的url
    # url = 'http://yun.itheima.com/Upload/Images/20170614/594106ee6ace5.jpg'
    url = "http://localhost:8888/postbackfile"
    param_dict = {'key1': 1001, 'key2': '测试信息', 'key3': ['value1', 'value2']}
    response = requests.post(url, json=param_dict)
    img = response.content
    with open( './images/response.jpg','wb' ) as f:
        f.write(img)
# 接收端
def post_back_file(self):
     """ 接收到post命令需要反馈文件 """
     data_byte = self.rfile.read(int(self.headers["content-length"]))
     data_obj = json.loads(str(data_byte, encoding="utf-8"))
     print("获取到的请求命令为:", data_obj)
     self.send_response(200)
     self.send_header('Content-Type', 'image/png')
     with open('./images/test.jpg', 'rb') as f:
         img_data = f.read()
         img_len = len(img_data)
         print('图像数据长度', img_len)
     self.send_header('Content-Length', img_len)  # os.path.getsize('Mario.png'))
     self.end_headers()
     self.wfile.write(img_data)
     self.wfile.flush()

完整代码下载

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值