使用带有API令牌的Ruby Curb gem

时间:2015-03-02 22:30:08

标签: ruby-on-rails ruby curb

Ruby的全新。我引用了Curb文档并尝试使用安全令牌在curl中提交请求。以下是传统请求中标题的3个部分:

  1. 我-安全令牌
  2. 1234567890
  3. website.com
  4. 如何构建Curb以提交姓名,值和评论,如上所示?

    我从以下开始:

    c = Curl::Easy.new("http://website.com") do |curl| 
      curl.headers["Name"] = "My-Security-Token"
      curl.headers["Value"] = "1234567890"
      curl.headers["Comment"] = "website.com"
      curl.verbose = true
    end
    
    c.perform
    

2 个答案:

答案 0 :(得分:1)

  

以下是我传统请求的标题的3个部分

     
      
  1. 我-安全令牌
  2.   
  3. 1234567890
  4.   
  5. website.com
  6.   

标题包含名称/值,因此您的描述没有任何意义。

看起来您的标题名称应为:

 My-Security-Token

它的价值应该是:

 1234567890

要制作GET request(您没有提及您正在制作的请求类型)并指定该标题,您可以执行以下操作:

require 'curb'

http = Curl.get("http://website.com/") do |http| 
  http.headers["My-Security-Token"] = "1234567890"
end

puts http.body_str[0..249]  #Output the first 250 characters of the response

如果您想使用详细模式,它将显示实际的请求和响应,您可以这样做:

require 'curb'

c = Curl::Easy.new("http://www.google.com/") do |curl| 
  curl.headers["My-Security-Token"] = "1234567890"
  curl.verbose = true
end

c.perform  #Outputs the request and the response
puts c.body_str[0..249]  #body_str => the body of the response

输出:

* About to connect() to www.google.com port 80 (#0)
*   Trying 74.125.28.147... * Connected to www.google.com (74.125.28.147) port 80 (#0)
> GET / HTTP/1.1
Host: www.google.com
Accept: */*
My-Security-Token: 1234567890  #***HERE IS YOUR CUSTOM HEADER****

< HTTP/1.1 200 OK
< Date: Tue, 03 Mar 2015 00:14:42 GMT
< Expires: -1
< Cache-Control: private, max-age=0
< Content-Type: text/html; charset=ISO-8859-1
< Set-Cookie: PREF=ID=479a8fa626097193:FF=0:TM=1425341682:LM=1425341682:S=5kflGPOAzEx-uMWb; expires=Thu, 02-Mar-2017 00:14:42 GMT; path=/; domain=.google.com
< Set-Cookie: NID=67=Eim3D__PFGbpSWdcIH9IPhkuDEVMFjN4ShU9gA6Z_rMryMoI6nv--sIjk_E00_EpMfSe3RkPO5dYjV7yGTXT3oMLX-t7FsrKSJmF7-OffAuLKrr5KfV1IZzL9yaJQKiB; expires=Wed, 02-Sep-2015 00:14:42 GMT; path=/; domain=.google.com; HttpOnly
< P3P: CP="This is not a P3P policy! See http://www.google.com/support/accounts/bin/answer.py?hl=en&answer=151657 for more info."
< Server: gws
< X-XSS-Protection: 1; mode=block
< X-Frame-Options: SAMEORIGIN
< Alternate-Protocol: 80:quic,p=0.08
< Accept-Ranges: none
< Vary: Accept-Encoding
< Transfer-Encoding: chunked
< 
* Expire cleared
* Connection #0 to host www.google.com left intact
<!doctype html><html itemscope="" itemtype="http://schema.org/WebPage" lang="en"><head><meta content="Search the world's information, including webpages, images, videos and more. Google has many specia

如果您确实希望自定义标头为:

Name: My-Security-Token
Value: 1234567890
Comment: website.com

...然后你可以这样做:

require 'curb'

c = Curl::Easy.new("http://www.google.com/") do |curl| 
  curl.headers["Name"] = "My-Security-Token"
  curl.headers["Value"] = "1234567890"
  curl.headers["Comment"] = "website.com"
  curl.verbose = true
end

c.perform
puts c.body_str[0..249]

...将生成如下输出:

* About to connect() to www.google.com port 80 (#0)
*   Trying 74.125.28.105... * Connected to www.google.com (74.125.28.105) port 80 (#0)
> GET / HTTP/1.1
Host: www.google.com
Accept: */*
Name: My-Security-Token   #HERE ARE YOUR HEADERS
Value: 1234567890         #HERE
Comment: website.com      #HERE
...
...

如果上面没有任何内容符合您的要求,那么如何发布您的实际&#34;传统&#34;请求?如果您不知道如何操作,请搜索谷歌。

答案 1 :(得分:0)

  

如何构建Curb以提交姓名,值和评论,如上所示?

第二个想法,看起来Name,Value和Comment是单个http头的组件:

  

通过围绕着,可以在一些HTTP头字段中包含注释   带括号的注释文本。评论仅允许在   包含“注释”的字段作为其字段值定义的一部分   在所有其他字段中,括号被视为字段的一部分   值。

如果是这种情况,您可以像这样创建自定义标题:

require 'curb'

c = Curl::Easy.new("http://www.google.com/") do |curl| 
  curl.headers["My-Security-Token"] = "1234567890 (website.com)"
  curl.verbose = true
end

c.perform  #Outputs the request and the response
puts c.body_str[0..249]  #body_str => the body of the response

--output:--
* About to connect() to www.google.com port 80 (#0)
*   Trying 74.125.28.104... * Connected to www.google.com (74.125.28.104) port 80 (#0)
> GET / HTTP/1.1
Host: www.google.com
Accept: */*
My-Security-Token: 1234567890 (website.com)  #***YOUR CUSTOM HEADER****
...
...