2

任何人都可以帮助我确定我尝试使用 Python 3 和“请求”库执行的非常基本的 AQL 哪里出错了吗?

无论我做什么,我似乎都无法通过 400:错误请求。这显然与我尝试发布但看不到的数据格式有关。我假设我想将它作为字符串传递,因为在发布 sql 查询时它们必须是纯文本。顺便说一句,我可以使用邮递员等完全执行此查询。

import requests
from requests.auth import HTTPBasicAuth
import json

HEADERS = {'Content-type': 'text'}
DATA =  'items.find({"type":"folder","repo":{"$eq":"BOS-Release-Builds"}}).sort({"$desc":["created"]}).limit(1)'

response = requests.post('https://local-Artifactory/artifactory/api/search/aql', headers=HEADERS, auth=HTTPBasicAuth('user', 'password'), data = DATA)
print (response.status_code)
##print (response.json())
def jprint(obj):
    text = json.dumps(obj, sort_keys=True, indent=4)
    print (text)

jprint(response.json())
print(response.url)
print(response.encoding)
4

1 回答 1

1

好的,在又盯着代码看了几分钟后,我发现了我的错误。我不应该在请求中定义 Header 内容类型,而是让“请求”库为您处理这个问题。

所以代码应该是这样的:

import requests
from requests.auth import HTTPBasicAuth
import json

DATA =  'items.find({"type":"folder","repo":{"$eq":"BOS-Release-Builds"}}).sort({"$desc":["created"]}).limit(1)'

response = requests.post('https://uk-artifactory.flowbird.group/artifactory/api/search/aql', auth=HTTPBasicAuth('user', 'password!'), data = DATA)
print (response.status_code)
##print (response.json())
def jprint(obj):
    text = json.dumps(obj, sort_keys=True, indent=4)
    print (text)

jprint(response.json())
print(response.url)
print(response.encoding)
于 2020-10-28T14:42:31.877 回答