我希望我的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) 我正在使用HTTParty处理Rails应用程序来发出HTTP请求.如何使用HTTParty处理HTTP错误?具体来说,我需要捕获HTTP 502和503以及连接拒绝和超时错误等其他错误.
具有基本身份验证的命令行版本"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来说是一个新手)是从用户表单获取用户凭据并动态传递它,但现在最重要的是让硬编码版本工作.
我正在使用本地服务器来测试应用程序,并从我自己的机器向该服务器发出请求.
测试服务器的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?
如何使用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) 如何记录与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) 我正在使用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) 我一直在尝试在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"
我怀疑我的环境有问题吗?
如何在发布帖子后在单独的脚本中使用httparty从rails项目获取响应URL或ID?
红宝石脚本:
HTTParty.post('http://localhost:3000/change_logs', parameters)
Run Code Online (Sandbox Code Playgroud)
response.body和所有其他人不显示网址和响应ID
我试图将参数传递给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没有设置,我该如何让它工作?
httparty ×10
ruby ×9
api ×2
http-headers ×1
httprequest ×1
json ×1
logging ×1
ssl ×1
timeout ×1