我对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放在何处,以便它们出现在请求地址的开头而不是结尾。
答案 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_id
或api_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)