Alfresco 基本身份验证适用于 curl 但不适用于 python
Alfresco basic authentication works with curl but not with 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 requests(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))
您正在使用 data
参数,但您需要使用 file
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 代码,它适用于同样使用基本身份验证的上传。请检查请求参数。
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))
问题分为两部分。首先我需要使用文件参数而不是数据。最重要的是,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')})```
我遇到了来自 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 requests(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))
您正在使用 data
参数,但您需要使用 file
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 代码,它适用于同样使用基本身份验证的上传。请检查请求参数。
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))
问题分为两部分。首先我需要使用文件参数而不是数据。最重要的是,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')})```