在Python中如何在POST请求中将查询作为主体发送
我正在尝试将一个人工查询作为主体发送给POST方法。我总是以400作为响应(这是一个错误的请求)。这是我的代码。我在这里做错了什么。查询看起来不错,因为它使用curl和Groovy工作在Python中如何在POST请求中将查询作为主体发送,python,python-2.7,python-requests,artifactory,Python,Python 2.7,Python Requests,Artifactory,我正在尝试将一个人工查询作为主体发送给POST方法。我总是以400作为响应(这是一个错误的请求)。这是我的代码。我在这里做错了什么。查询看起来不错,因为它使用curl和Groovy工作 host = http://artifactory.com/artifactory build_url = '%s/api/search/aql' % (host) payload='{items.find({"repo":"lib","type":"file","path":"builds"}).include
host = http://artifactory.com/artifactory
build_url = '%s/api/search/aql' % (host)
payload='{items.find({"repo":"lib","type":"file","path":"builds"}).include("*"}'
response = requests.post(build_url,data=payload,auth=(user:pwd))
print response
输出:
响应[400]
我使用的是Python2.7,下面是RESTAPI的详细信息
Artifactory Query Language (AQL) REST API
Since: 3.5.0
Security: Requires an authenticated user
Usage: POST /api/search/aql
Consumes: text/plain
--提前谢谢我想你只是在
include(“*”
之后的末尾缺少了一个括号。试试这个:
payload='{items.find({"repo":"lib","type":"file","path":"builds"}).include("*")}'
编辑:根据讨论,问题在于缺少身份验证。这只是一个输入错误。我试图在粘贴到此处时简化查询,是的,我尝试了上面的查询,您粘贴了。这不起作用。post方法是否有其他方式发送此类消息?我不确定您是否需要其他方式进行调用,这是一个应该可以正常工作。请求或服务器处理肯定存在其他固有的问题。是否有响应正文?您是否可以发布完整的响应,也许?我建议您查看服务器日志,如果您在那里找不到任何内容,也许您应该制作一些。服务器拒绝您的请求,并且第一次我要做的是找出原因。可能是因为它希望您不提供某些请求标题?我知道了问题。感谢您的建议。问题是我用于从artifactory中的特定存储库请求内容的用户没有必要的权限。在我向该用户授予从该存储库读取内容的权限之后存储库,一切看起来都很好。在这种情况下,我认为您从服务器返回的响应是错误的。在这种情况下,似乎应该返回401状态代码。在这种情况下,返回正确的状态代码将对您有很大帮助。我已编辑了答案以包含解决方案,如果您认为正确,请接受嗅它。