You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将Postman POST请求转为Python requests代码并解决XML上传错误

问题解决:POST XML文件到API的Python代码修正

核心错误分析

  • 错误指定Content-Type头:手动设置为application/xml,但实际请求包含表单字段和文件,需使用multipart/form-data格式,requests会自动处理该头,手动指定会导致API无法正确解析请求。
  • 文件参数位置错误:将文件放在data参数中,应单独放在files参数里,表单字段单独放在data参数传递。
  • 文件元组格式错误:文件元组的正确顺序应为(文件名, 文件对象, 内容类型),原代码顺序颠倒导致识别异常。

关于Content-Length和Host字段的说明

  • Host:requests会自动从请求URL中提取并添加Host头,无需手动设置。
  • Content-Length:requests会自动计算请求体的长度并添加该头,除非使用流式上传(如stream=True),否则不需要手动计算,手动设置反而可能因计算错误导致请求失败。

修正后的代码

import requests

url3 = 'http://xxx.azure.com/xxx/api/file'
file_path = 'ok/test_file.xml'

headers = {'Token': 'xxx'}  # 移除错误的Content-Type,让requests自动处理请求格式

# 表单字段集合
form_data = {
    'Tags': 'python',
    'ExternalTrackingId': '1-python',
    'FastTrack': 'False',  # 布尔值转为字符串传递,避免部分API解析异常
    'RequiresBatchSend': 'True'
}

def send_invoice():
    # 使用with语句管理文件对象,确保请求完成后自动关闭文件
    with open(file_path, 'rb') as f:
        files = {
            'file.xml': ('test_file.xml', f, 'application/xml')
        }
        send_file = requests.post(url3, headers=headers, data=form_data, files=files)
    return send_file.text, send_file.status_code

print(send_invoice())

额外注意事项

  • 布尔值传递:在multipart/form-data请求中,部分API无法直接解析Python的布尔类型(True/False),建议转换为字符串'True'/'False'传递。
  • 文件资源管理:始终使用with语句打开文件,避免因未关闭文件句柄导致的资源泄漏问题。

内容的提问来源于stack exchange,提问作者dominik

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 23:35:41