标签: httparty

使用Rails和HTTParty将JSON POST到API

我希望我的ruby on rails应用程序中的用户能够向我的外部票务管理系统squishlist.com提交票证.他们有api和说明如下.您需要进行身份验证并获取令牌,然后使用令牌提交票证.来自squishlist.

# get the token

https://api.squishlist.com/auth/?cfg=testcorp&user_key=privatekey&api_key=TEST-KEY-12345
  => {"token": "authtoken",
      "expires": "2010-06-16 13:31:56"}

# and then the ticket with the token

https://api.squishlist.com/rest/?cfg=testcorp&token=authtoken&method=squish.issue.submit&prj=demo
  POST data: {'issue_type': 1, 'subject': 'Hello, world.', 4: 'Open', 5: 10}
Run Code Online (Sandbox Code Playgroud)

出于测试目的,我创建了一个控制器,路由和视图(页面)进行测试.在我的控制器上,我有以下内容

require 'httparty'
require 'json'

class SubmitticketController < ApplicationController

    def submit_a_ticket

        @cfg = 'xxxsupport'
        @user_key = '4787fsdbbfbfsdbhbfad5aba91129a3f1ed1b743321f7b'
        @api_key = 'MrUser411'
        @project = 'excelm-manoke'
        @url_new_string = 'https://api.squishlist.com/auth/?cfg='+@cfg+'&user_key='+@user_key+'&api_key='+@api_key
        # https://api.squishlist.com/auth/?cfg=xxxsupport&user_key=4787fsdbbfbfsdbhbfad5aba91129a3f1ed1b743321f7b&api_key=MrUser411  - this is what is created by @url_new_string
        response =  HTTParty.get(@url_new_string.to_str)  #submit the string to get the token …
Run Code Online (Sandbox Code Playgroud)

api json ruby-on-rails httparty

104
推荐指数
2
解决办法
10万
查看次数

如何使用HTTParty处理错误?

我正在使用HTTParty处理Rails应用程序来发出HTTP请求.如何使用HTTParty处理HTTP错误?具体来说,我需要捕获HTTP 502和503以及连接拒绝和超时错误等其他错误.

ruby ruby-on-rails httparty

70
推荐指数
3
解决办法
4万
查看次数

如何在Rails应用程序中使用httparty进行基本身份验证?

具有基本身份验证的命令行版本"httparty"工作简单而且很棒:

httparty -u username:password http://example.com/api/url
Run Code Online (Sandbox Code Playgroud)

但现在我正在寻找可以在Rails应用程序中将基本身份验证添加到HTTParty.get调用的方式.首先,出于测试目的,我想在Controller中硬编码登录凭据.只是为了确保它有效.但我找不到任何文档或示例如何传递这些.

没有凭据的HTTParty.get工作正常:

@blah = HTTParty.get("http://twitter.com/statuses/public_timeline.json")
Run Code Online (Sandbox Code Playgroud)

但我不明白我如何能够接受-u用户名:密码部分.

对我来说,下一个挑战(对于Ruby/Rails来说是一个新手)是从用户表单获取用户凭据并动态传递它,但现在最重要的是让硬编码版本工作.

ruby httparty ruby-on-rails-3

67
推荐指数
1
解决办法
3万
查看次数

如何使HTTParty忽略SSL?

我正在使用本地服务器来测试应用程序,并从我自己的机器向该服务器发出请求.

测试服务器的SSL很糟糕,因此HTTParty会抛出错误.根据我的阅读,HTTParty默认情况下应该忽略SSL,但是当我尝试这样做时:

HTTParty.get( "#{ @settings.api_server }#{ url }" ).parsed_response
Run Code Online (Sandbox Code Playgroud)

它抛出此错误:

OpenSSL::SSL::SSLError at /
SSL_connect returned=1 errno=0 state=SSLv3 read server certificate B: certificate verify failed
Run Code Online (Sandbox Code Playgroud)

如何让它忽略SSL?

ruby ssl httparty

50
推荐指数
3
解决办法
2万
查看次数

在HTTparty中传递标题和查询参数

如何使用HTTparty在post方法中传递查询参数和头文件.我正在做如下但它抛出

query = {:method => "neworder", :nonce => 1404996028, :order_type => "buy", :quantity=>1,:rate=>1}
headers = {:key=> "87819747209090199871234", :sign=> "0a3888ac7f8e411ad73a0a503c55db70a291rsf34bfb9f9a47147d5200882674f717f6ede475669f3453"}

HTTParty.post("https://www.acb.com/api/v2/market/LTC_BTC/", :query => query, :headers => headers )
Run Code Online (Sandbox Code Playgroud)

但它会引发以下错误.如何使用HTTparty处理查询字符串参数和标头.

/home/user/.rvm/rubies/ruby-2.1.0/lib/ruby/2.1.0/net/http/header.rb:172:in `capitalize': undefined method `split' for :key:Symbol (NoMethodError)
from /home/user/.rvm/rubies/ruby-2.1.0/lib/ruby/2.1.0/net/http/header.rb:165:in `block in each_capitalized'
from /home/user/.rvm/rubies/ruby-2.1.0/lib/ruby/2.1.0/net/http/header.rb:164:in `each'
from /home/user/.rvm/rubies/ruby-2.1.0/lib/ruby/2.1.0/net/http/header.rb:164:in `each_capitalized'
Run Code Online (Sandbox Code Playgroud)

ruby ruby-on-rails httparty http-headers

47
推荐指数
2
解决办法
4万
查看次数

httparty:如何记录请求?

如何记录与httparty一起发送的请求?

HTTParty.post(
          @application_url,
          :headers => {
            "Accept"        => "application/json",
            "Content-Type"  => "application/json; charset=utf-8"
          },
          :body => {
            "ApplicationProfileId" => application.applicationProfileId
          }.to_json
        )
Run Code Online (Sandbox Code Playgroud)

ruby logging httprequest httparty

24
推荐指数
2
解决办法
1万
查看次数

Ruby错误Net :: ReadTimeout

我正在使用httparty进行一系列API调用.前两个API调用成功,但第三个失败.它暂停约60秒(默认超时时间),然后返回此错误:

/Users/luigi/.rvm/rubies/ruby-2.0.0-p247/lib/ruby/2.0.0/net/protocol.rb:158:in `rescue in rbuf_fill': Net::ReadTimeout (Net::ReadTimeout)
    from /Users/luigi/.rvm/rubies/ruby-2.0.0-p247/lib/ruby/2.0.0/net/protocol.rb:152:in `rbuf_fill'
    from /Users/luigi/.rvm/rubies/ruby-2.0.0-p247/lib/ruby/2.0.0/net/protocol.rb:134:in `readuntil'
    from /Users/luigi/.rvm/rubies/ruby-2.0.0-p247/lib/ruby/2.0.0/net/protocol.rb:144:in `readline'
    from /Users/luigi/.rvm/rubies/ruby-2.0.0-p247/lib/ruby/2.0.0/net/http/response.rb:39:in `read_status_line'
    from /Users/luigi/.rvm/rubies/ruby-2.0.0-p247/lib/ruby/2.0.0/net/http/response.rb:28:in `read_new'
    from /Users/luigi/.rvm/rubies/ruby-2.0.0-p247/lib/ruby/2.0.0/net/http.rb:1406:in `block in transport_request'
    from /Users/luigi/.rvm/rubies/ruby-2.0.0-p247/lib/ruby/2.0.0/net/http.rb:1403:in `catch'
    from /Users/luigi/.rvm/rubies/ruby-2.0.0-p247/lib/ruby/2.0.0/net/http.rb:1403:in `transport_request'
    from /Users/luigi/.rvm/rubies/ruby-2.0.0-p247/lib/ruby/2.0.0/net/http.rb:1376:in `request'
    from /Users/luigi/.rvm/rubies/ruby-2.0.0-p247/lib/ruby/2.0.0/net/http.rb:1369:in `block in request'
    from /Users/luigi/.rvm/rubies/ruby-2.0.0-p247/lib/ruby/2.0.0/net/http.rb:852:in `start'
    from /Users/luigi/.rvm/rubies/ruby-2.0.0-p247/lib/ruby/2.0.0/net/http.rb:1367:in `request'
    from /Users/luigi/.rvm/gems/ruby-2.0.0-p247@pdf/gems/httparty-0.12.0/lib/httparty/request.rb:93:in `perform'
    from /Users/luigi/.rvm/gems/ruby-2.0.0-p247@pdf/gems/httparty-0.12.0/lib/httparty.rb:486:in `perform_request'
    from /Users/luigi/.rvm/gems/ruby-2.0.0-p247@pdf/gems/httparty-0.12.0/lib/httparty.rb:423:in `get'
    from /Users/jmccann/.rvm/gems/ruby-2.0.0-p247@pdf/gems/httparty-0.12.0/lib/httparty.rb:518:in `get'
Run Code Online (Sandbox Code Playgroud)

我的问题是为什么会发生这种情况?这个错误是指示API的错误,还是我可以做些什么来引起它?

我的代码:

这是有效的通话:

url = HTTParty.get("https://dev.test.com#{call}",
    :basic_auth => auth,
    :headers => {'Accept' => 'application/json' } )
Run Code Online (Sandbox Code Playgroud)

这是不起作用的电话:

url = HTTParty.get("https://dev.test.com#{call}",
    :basic_auth …
Run Code Online (Sandbox Code Playgroud)

ruby api timeout httparty

21
推荐指数
1
解决办法
4万
查看次数

麻烦包括在铁轨上的红宝石中的httparty

我一直在尝试在rails代码中使用HTTParty

sudo gem install httparty
Run Code Online (Sandbox Code Playgroud)

从命令行我现在可以成功地做到

httparty "http://twitter.com/statuses/public_timeline.json"
Run Code Online (Sandbox Code Playgroud)

当我在我的rails应用程序中尝试此操作时

require 'rubygems'
require 'httparty'

class FooController < ApplicationController
  include HTTParty

  def bar
    blah = HTTParty.get("http://twitter.com/statuses/public_timeline.json")
  end
end
Run Code Online (Sandbox Code Playgroud)

我收到错误消息"没有这样的文件加载 - httparty"

我怀疑我的环境有问题吗?

ruby ruby-on-rails httparty

18
推荐指数
2
解决办法
2万
查看次数

ruby httparty在帖子后获得回复网址或ID

如何在发布帖子后在单独的脚本中使用httparty从rails项目获取响应URL或ID?

红宝石脚本:

  HTTParty.post('http://localhost:3000/change_logs', parameters)
Run Code Online (Sandbox Code Playgroud)

response.body和所有其他人不显示网址和响应ID

ruby httparty

16
推荐指数
2
解决办法
5982
查看次数

如何使用httparty切换base_uri

我试图将参数传递给login方法,我想基于该参数切换基础uri.

像这样:

class Managementdb
  include HTTParty

  def self.login(game_name)
        case game_name
        when "game1"
            self.base_uri = "http://game1"
        when "game2"
            self.base_uri = "http://game2"
        when "game3"
            self.base_uri = "http://game3"
        end

    response = self.get("/login")

        if response.success?
      @authToken = response["authToken"]
    else
      # this just raises the net/http response that was raised
      raise response.response    
    end
  end

  ...
Run Code Online (Sandbox Code Playgroud)

当我从一个方法调用它时,基础uri没有设置,我该如何让它工作?

ruby httparty

16
推荐指数
3
解决办法
1万
查看次数