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

Python 2.7 Requests调用REST API与Curl结果不一致问题排查

解决Python requests与curl POST请求差异导致的400错误

我对比了你的curl命令和Python代码,发现两处关键的不匹配点,这就是导致API返回400错误的核心原因,下面是具体的修复方案:

问题根源

  1. 上传文件的参数名不匹配:curl里用filedata作为文件的参数名(-F filedata=@file1.txt),但你的Python代码里用的是file,而Alfresco的REST API明确要求通过filedata字段接收上传的文件。
  2. nodeType参数值不一致:curl里传递的是nodeType=content,但你Python代码里写的是cm:content,这个值不符合API的参数要求。

另外还有个小细节:原代码里的response.json是属性引用,正确的用法应该是调用response.json()方法,不然你打印的是方法对象,不是解析后的JSON响应内容。

修改后的可运行代码

import requests
from requests.auth import HTTPBasicAuth
from config import USER, PASSWD

def createDocument(documentFilename, documentMetadata, targetFolderNodeId):
    ''' Uploads a file and its meta-data to the CMIS server under the specified target folder '''
    with open(documentFilename, 'rb') as file:
        # 修正:文件字段名改为'filedata',和curl保持一致
        files = {'filedata': file}
        createURL = 'http://127.0.0.1:8080/alfresco/api/-default-/public/alfresco/versions/1/nodes/6a0ab661-1c43-43ed-b07f-a564f6bcb5ca/children'
        data = {
            "name": "document__55",
            # 修正:nodeType值改为'content',匹配curl的参数
            "nodeType": "content",
        }
        response = requests.post(createURL, data=data, files=files, auth=HTTPBasicAuth(USER, PASSWD))
        print(response.status_code)
        print(response.json())  # 调用方法解析JSON响应
        print(response.text)

createDocument('file1.txt', '', '')

额外检查点

确保你的config.py里的USER是admin,PASSWD是blabla123,和curl里的认证信息完全一致,避免因为认证问题导致的错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 06:44:16