【问题标题】:How to send a Query as a body in the POST request in Python如何在 Python 的 POST 请求中将查询作为正文发送
【发布时间】:2016-03-25 18:03:24
【问题描述】:

我正在尝试将人工查询作为主体发送到 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("*"}'
response = requests.post(build_url,data=payload,auth=(user:pwd))
print response

输出: 响应 [400]

我使用的是 Python 2.7,这里是 REST API 详细信息

Artifactory Query Language (AQL) REST API
Since: 3.5.0
Security: Requires an authenticated user
Usage: POST /api/search/aql
Consumes: text/plain

--提前致谢

【问题讨论】:

    标签: python python-2.7 python-requests artifactory


    【解决方案1】:

    我认为您只是在include("*" 之后缺少了一个括号。试试这个:

    payload='{items.find({"repo":"lib","type":"file","path":"builds"}).include("*")}'
    

    编辑:根据讨论,问题是缺乏身份验证。

    【讨论】:

    • 这只是一个错字。我试图在粘贴时简化查询发送这种类型的消息?
    • 我不确定您是否需要另一种拨打电话的方式,这种方式应该可以正常工作。请求或服务器处理必须存在其他固有错误。有响应机构吗?你能发布完整的回复,也许?我建议你看看你的服务器日志,如果你在那里找不到任何东西,也许你应该做一些。服务器拒绝您的请求,首先要做的是找出原因。也许它期待一些您不提供的请求标头?
    • 我遇到了问题。感谢您的建议。问题是我用来从工件中的特定存储库请求内容的用户,没有必要的权限。在我授予该权限后用户从该存储库中读取内容,一切看起来都不错。
    • 好吧,在这种情况下,我认为您从服务器返回了错误的响应 status code。在这种情况下,返回 401 状态码似乎是合适的。在此类情况下,返回正确的状态代码将帮助您很多。我已经编辑了答案以包含解决方案,如果您认为可以解决,请接受。
    猜你喜欢
    • 2014-07-19
    • 2022-06-19
    • 2016-11-03
    • 1970-01-01
    • 1970-01-01
    • 2017-11-17
    • 1970-01-01
    • 2021-07-07
    • 2019-08-25
    相关资源
    最近更新 更多