curl请求HTTParty请求

时间:2014-11-18 19:35:25

标签: api curl httparty

我对API的经验很少,有人可以帮我翻译一下:

$ curl -X POST -d "login_id=myemail@email.com&api_key=231421423423423423423" \
  https://devapi.testapi.com/v2/authenticate/api

这样的事情?:

include HTTParty
base_uri 'https://devapi.testapi.com'

def login
  response = self.class.post( "/v2/authenticate/api",
               :headers => { "login_id" => 'myemail@email.com', "api_key" => '231421423423423423423' }
             ).parsed_response

  @token = response["auth_token"]
  return @token
end

我不确定将login_id和api_key放在何处,以便它们出现在请求地址的开头而不是结尾。

1 个答案:

答案 0 :(得分:1)

首先,我们需要澄清一些困惑。当您发送POST请求时,就像您使用Curl一样,它看起来像这样:

POST /v2/authenticate/api HTTP/1.1
User-Agent: curl/7.30.0
Host: localhost:8000
Accept: */*
Content-Length: 56
Content-Type: application/x-www-form-urlencoded

login_id=myemail@email.com&api_key=231421423423423423423

第一行是请求方法(POST)和资源(/v2/authenticate/api)和协议版本(HTTP/1.1)。接下来的五行是标题,它们总是有一个键(例如Content-Length),后跟冒号和空格(:),后跟一个值(56)。

您会注意到这些标头中没有一个包含您的数据,即login_idapi_key。数据不会出现在标题中。它进入正文,它位于标题之后,并且是一个介入服务器的空白行,"标题已完成;我发送的其他所有内容都是正文。"

希望这有助于消除我在这里看到的困惑:

  

我不确定将login_id和api_key放在何处,以便它们出现在请求地址的开头而不是结尾。

在POST请求中,数据不是地址的一部分,也不是重申的部分标题。这是身体。

使用HTTParty发出POST请求时,您可以使用:body选项指定要用作POST主体的字符串,但在Ruby代码中,您似乎更喜欢使用Hash,这是正确的方法。使用哈希,您使用:query选项而不是:body,HTTParty将自动正确编码哈希的内容。使用它,您的代码将如下所示:

query_hash = { :login_id => 'myemail@email.com',
               :api_key  => '231421423423423423423' }

response = self.class.post("/v2/authenticate/api", :query => query_hash)