首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >红宝石上方的人工AQL哨所

红宝石上方的人工AQL哨所
EN

Stack Overflow用户
提问于 2015-09-22 08:16:25
回答 1查看 322关注 0票数 3

我试图使用ruby代码查询Artifactory的AQL,我已经检查了这个代码是否可以使用curl在bash上工作:

curl -u admin:password -i -H "Accept: application/json" -X POST http://server.example.com:8081/artifactory/api/search/aql -T aql.aql

其中aql.aql内容如下:

代码语言:javascript
复制
items.find
(
    {
        "repo":{"$eq":"test-ASO"}
    }
)
.include("name","property.*")

现在,我尝试使用Ruby对以下代码进行同样的操作:

代码语言:javascript
复制
#!/usr/bin/ruby
require 'rubygems'
require 'json'
require 'open-uri'
require 'uri'
require 'net/http'

payload ='items.find
(
    {
        "repo":{"$eq":"test-ASO"}
    }
).include("name","property.*")'

uri = URI.parse("http://server.example.com:8081/artifactory/api/search/aql")
http = Net::HTTP.new(uri.host,uri.port)
req = Net::HTTP::Post.new(uri.path)
req.basic_auth 'user', 'password'
req.set_form_data(payload)
res = http.request(req)
puts res.body

但我得到的只是:

代码语言:javascript
复制
{
  "errors" : [ {
    "status" : 400,
    "message" : "Bad Request"
  } ]
}

我的猜测是,查询的有效负载必须是一个文件,正如我以前对curl (-T参数)所做的那样,但我不认为使用文件进行查询是实现这一目标的一种非常优雅的方法。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-09-22 12:39:28

编辑

最后,我通过声明具有适当内容的req.body变量实现了这一点:

代码语言:javascript
复制
#!/usr/bin/ruby
require 'rubygems'
require 'json'
require 'open-uri'
require 'uri'
require 'net/http'

payload = 'items.find().include("name","property.*")'

uri = URI.parse("http://server.example.com:8081/artifactory/api/search/aql")
http = Net::HTTP.new(uri.host,uri.port)
req = Net::HTTP::Post.new(uri.path)
req["Content-Type"] = "text/plain"
req.basic_auth 'admin', 'password'
req.body = payload
res = http.request(req)
puts res.body
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32711816

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档