Alfresco basic身份验证可用于curl,但不能用于python

2024-09-26 18:20:25 发布

您现在位置:Python中文网/ 问答频道 /正文

我遇到了来自Alfresco的身份验证错误问题,也许有人可以在我试图从Alfresco的混乱中查找日志文件时告诉我

curl -uadmin:password -X POST https://hostname/alfresco/api/-default-/public/alfresco/versions/1/nodes/node_uuid/children -F filedata=@/home/user/file.pdf

现在,当我尝试使用python请求(TM)时,它给了我一个401。我检查了请求,它们都发送相同的身份验证哈希

这是python代码:

def handle_row_for_request(row):

    url = 'https://' + hostname + '/alfresco/api/-default-/public/alfresco/versions/1/nodes/' + base_uuid + '/children'

    data = '/home/user/file.pdf'

    with open(data, 'rb') as payload:
        headers={"content-type": "multipart/form-data"}
        response = requests.post(url, headers=headers, data=payload, auth=(username, password))

Tags: https身份验证apidefaultdatauuidpasswordpublic
3条回答

这个问题有两个部分。首先,我需要使用file参数而不是data。除此之外,Alfresto希望在文件参数中获取“filedata”字符串

其次,auth(user,pw)生成了一个散列,最后有一个=符号,alfresco表示401。当我使用cURL并从那里得到密码散列时,它最后有两个=符号。奇怪吧?但这起了作用。我没有使用auth(user,pw),而是将'Authorization':'Basic${base64thing}'设置为身份验证

response = requests.post(url, headers={'Authorization': 'Basic base64string'}, files={'filedata': open(/path/, 'rb')})```

您正在使用data参数,但需要使用^{} argument

def handle_row_for_request(row):

    url = 'https://' + hostname + '/alfresco/api/-default-/public/alfresco/versions/1/nodes/' + base_uuid + '/children'

    files = {'filedata': ('/home/user/file.pdf', open('/home/user/file.pdf', 'rb'))}
    headers={"content-type": "multipart/form-data"}
    response = requests.post(url, headers=headers, files=files, auth=(username, password))

下面是Python代码,对于同样使用基本auth的上传,它可以很好地工作。请检查请求参数

import json
import requests

url = "http://localhost:8080/alfresco/service/api/upload"
auth = ("admin", "admin")
files = {"filedata": open("/tmp/foo.txt", "rb")}
data = {"siteid": "test", "containerid": "documentLibrary"}
r = requests.post(url, files=files, data=data, auth=auth)
print(r.status_code)
print(json.loads(r.text))

相关问题 更多 >

    热门问题