我正在尝试使用ruby代码查询Artifactory的AQL API,我已经检查过该代码是否可以使用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
其中intellig.aql的内容如下:
items.find
(
{
"repo":{"$eq":"test-ASO"}
}
)
.include("name","property.*")
现在,我尝试使用带有以下代码的Ruby进行相同的操作:
#!/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
但是我得到的是:
{
"errors" : [ {
"status" : 400,
"message" : "Bad Request"
} ]
}
我的猜测是,查询的有效负载必须是文件,就像我之前使用curl(-T参数)所做的那样,但是我不认为使用文件进行查询是实现此目的的一种非常优雅的方法。
编辑
最后,我通过声明具有适当内容的req.body变量实现了这一点:
#!/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
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句