【问题标题】:curl request to HTTParty requestcurl 请求到 HTTParty 请求
【发布时间】:2014-11-18 19:35:25
【问题描述】:

我对 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 放在哪里,以便它们出现在请求地址的开头而不是结尾。

【问题讨论】:

    标签: api curl httparty


    【解决方案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 将自动正确编码 Hash 的内容。使用它,您的代码将如下所示:

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

    【讨论】:

    • 呜呜呜,谢谢你的解释,这对以后肯定有用。顺便说一句,它奏效了! :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-05
    • 2015-04-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多