是红宝石的新手。我试图从ruby代码调用REST API。我已经尝试使用sinatra作为独立的ruby代码和应用程序内部的代码。但是每个地方都面临同样的问题。以下是我尝试的选项。
使用RestClient调用Post API的代码。修改了数据以使其成为通用
url="https://myapiurl.com/endpointname"
person={"name"=>"Sample Name","age"=>"20"}
headers={
"Content-Type"=>"application/json",
"api-key"=>"ABCDEFGHIJKL"
}
response=RestClient.post url,person.to_json,headers
puts response
我在函数中编写了上面的代码块并尝试调用。但我得到的答复如下
{"status": 401, "error":"Unauthorized Access"}
我通过邮差以下设置尝试了相同的api,并且能够从api获得正确的响应。
URL : https://myapiurl.com/endpointname
Headers : Content-Type: application/json, api-key:"ABCDEFGHIJKL"
Body: Raw:application/json: {"name":"Sample Name","age":"20"}
当我尝试不通过邮递员在标题中传递api-key
时,我得到了与通过ruby代码获得的类似的响应。
接下来我尝试从postman选项生成代码。下面是从postman为Ruby(Net :: Http)生成的代码。
我从ruby代码中删除了cache-control
和postman-token
的post params,并尝试运行ruby代码。我再次得到了同样的“未经授权的”#39;仅回复!
require 'uri'
require 'net/http'
url = URI("https://myapiurl.com/endpointname")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
http.verify_mode = OpenSSL::SSL::VERIFY_NONE
request = Net::HTTP::Post.new(url)
request["content-type"] = 'application/json'
request["api-key"] = 'ABCDEFGHIJKL'
request["cache-control"] = 'no-cache'
request["postman-token"] = 'some value got generated'
request.body = "{\"name\":\"Sample Name\",\"age\":\"20\"}"
response = http.request(request)
puts response.read_body
我怀疑是某些IP级别问题是阻塞因此尝试使用curl命令来命中api,如下所示。我从API得到了适当的回应。
curl -X POST \
https://myapiurl.com/endpointname \
-H 'content-type: application/json' \
-H 'api-key: ABCDEGHIJKL' \
-d '{"name":"Sample Name","age":"20"}'
我相信api-key
没有通过ruby代码传递给请求。我通过ruby代码在标题中发送api-key
的方式是否正确?