客户端使用正确标头发布请求始终返回401- UnAuthorized

时间:2017-12-01 02:24:48

标签: ruby curl sinatra rest-client net-http

是红宝石的新手。我试图从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-controlpostman-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的方式是否正确?

0 个答案:

没有答案