Tag: rest client

Rails:如何将文件从S3发送到远程服务器

我一直在打猎,似乎无法找到一个好的解决方案。 My Rails应用程序将其文件存储在Amazon S3中。 我现在需要将它们发送到远程(第三方)服务。 我正在使用RestClient发布到第三方服务器,如下所示: send_file = RestClient::Request.execute( :method => :post, :url => “http://remote-server-url.com”, :payload => File.new(“some_local_file.avi”, ‘rb’), :multipart => true, etc…. ) 它适用于本地文件,但如何将S3中的远程文件直接发送到此第三方服务? 我在这里找到了一个答案,其中有人使用open-uri: ruby从S3读取带有open-URI的文件 我为自己测试了它,并且它有效。 :payload => open(URI.parse(“http://amazon-s3-example.com/some_file.avi”)) 但是,我在这里读到一条评论说open-uri只是将远程文件加载到内存中。 请参阅此答案的最新评论: https : //stackoverflow.com/a/264239/2785592 这不太理想,因为我正在处理潜在的大型video文件。 我还读过RestClient甚至将本地文件加载到内存中的某个地方; 再次,这不是理想的。 有谁知道这是真的吗? 当然,我不能成为唯一有这个问题的人。 我知道我可以在发送之前在本地下载S3文件,但我希望节省时间和带宽。 此外,如果RestClient确实将本地文件加载到内存中,那么在本地下载它并不能保存任何东西。 嘿嘿 任何建议将不胜感激。 谢谢 :) 更新:远程服务器只是一个响应发布请求的API。 我没有能力改变他们的结果。

Twitter应用程序仅Auth

我正在尝试按照此链接的步骤获取Application Only Auth令牌: https : //dev.twitter.com/docs/auth/application-only-auth 我正在使用Ruby on Rails和Rest Client来提供所需的POST请求,我正在设置标题(我认为)。 一步一步说: URL根据RFC 1738编码使用者密钥和使用者密钥。请注意,在编写本文时,这实际上不会更改使用者密钥和密钥,但是如果这些值的格式发生变化,仍应执行此步骤。未来。 将编码的使用者密钥,冒号字符“:”和编码的使用者密钥连接成单个字符串。 Base64对上一步中的字符串进行编码。 我的代码是: require ‘rest_client’ key = URI::encode(‘app_key’) secret = URI::encode(‘app_secret’) encoded = Base64.encode64(“#{key}:#{secret}”) res = RestClient::Resource.new “https://api.twitter.com/oauth2/token/” response = ” options = {} options[‘Authorization’] = “Basic #{encoded}” options[‘Content-Type’] = ‘application/x-www-form-urlencoded;charset=UTF-8’ res.post(‘grant_type=client_credentials’, options) do |response, request, result| response << "#{CGI::escapeHTML(response.inspect)}” response << […]

ruby rest-client:永远不会超时?

我正在尝试使用ruby rest-client将大量图像上传到我正在编写的网站。 我的代码看起来像: RestClient.post url, :timeout => 90000000, :open_timeout => 90000000, :file_param => file_obj 但是,我收到此错误: RestClient::RequestTimeout: Request Timeout from /Library/Ruby/Gems/1.8/gems/rest-client-1.6.1/lib/restclient/request.rb:174:in `transmit’ from /Library/Ruby/ 但是当我查看服务器日志时 Completed in 61493ms (View: 2, DB: 1) | 201 Created 所以似乎没有任何理由为什么这是超时。 任何人都知道如果有超时参数我没有正确设置? 谢谢

SSLError:主机名“WXYZ”与服务器证书不匹配

我刚开始学习Ruby,经过一些基本的事情,我试图理解在ruby中对REST服务进行REST调用。 我可以毫不费力地向foursquare API提出请求。 另一方面,对Cisco CMX API的调用会出错。 我的ruby版本是2.1.2。 我在网上搜索了很多解决方案,但仍然遇到问题。 这是我运行的shell命令。 工作一 $resclient >> RestClient.get ‘https://api.foursquare.com/v2/venues/search?ll=40.7,-74&oauth_token=0ZDO1JMJ0PW2QTCDK50OGZ21UENHZ0Y3KIDQZJLLURTQNRQ2&v=20150106’ 这给出了错误 $restclient >> RestClient.get ‘https://learning:learning@64.103.26.61/api/contextaware/v1/maps/.json’ 我的错误日志: OpenSSL::SSL::SSLError: hostname “64.103.26.61” does not match the server certificate from /Users/apple/.rbenv/versions/2.1.2/lib/ruby/2.1.0/openssl/ssl.rb:139:in `post_connection_check’ from /Users/apple/.rbenv/versions/2.1.2/lib/ruby/2.1.0/net/http.rb:922:in `connect’ from /Users/apple/.rbenv/versions/2.1.2/lib/ruby/2.1.0/net/http.rb:863:in `do_start’ from /Users/apple/.rbenv/versions/2.1.2/lib/ruby/2.1.0/net/http.rb:852:in `start’ from /Users/apple/.rbenv/versions/2.1.2/lib/ruby/gems/2.1.0/gems/rest-client-1.7.2/lib/restclient/request.rb:413:in `transmit’ from /Users/apple/.rbenv/versions/2.1.2/lib/ruby/gems/2.1.0/gems/rest-client-1.7.2/lib/restclient/request.rb:176:in `execute’ from /Users/apple/.rbenv/versions/2.1.2/lib/ruby/gems/2.1.0/gems/rest-client-1.7.2/lib/restclient/request.rb:41:in `execute’ from /Users/apple/.rbenv/versions/2.1.2/lib/ruby/gems/2.1.0/gems/rest-client-1.7.2/lib/restclient.rb:65:in `get’ from (irb):3 […]

使用REST_CLIENT发出请求,相当于curl请求

我正在尝试使用rest_client来发出这个curl请求,并且我一直都弄错了。 我该怎么做? curl请求:它运行良好并从yahoo返回访问令牌。 curl -u “:” -d “grant_type=authorization_code&code=&redirect_uri=” https://api.login.yahoo.com/oauth2/get_token 我正在努力工作的rest_client请求是: # get token yahoo_url = “https://api.login.yahoo.com/oauth2/get_token/” response = RestClient::Request.new( :method => :get, :url => yahoo_url, :client_id => $consumer_id, :client_secret => $consumer_secret, :headers => { :accept => :json,:content_type => :json}, :params => {‘grant_type’ => ‘authorization_code’, ‘code’ => code, ‘redirect_uri’ => $yahoo_redirect_url} ).execute results = JSON.parse(response.to_str) puts […]

Rails – 如何通过API向SendGrid营销活动添加联系人

我需要使用SendGrid进行HTTP get和post请求以向我们的帐户添加联系人,但是他们的电子邮件营销function似乎没有gem。 它归结为提出一些请求,但我无法通过他们的身份validation步骤。 他们说这样做 curl -X “GET” “https://api.sendgrid.com/v3/templates” -H “Authorization: Bearer Your.API.Key-HERE” -H “Content-Type: application/json” 并使用Rest-Client gem我正在尝试进行身份validation请求…… username = ‘username’ api_key = ‘SG.MY_API_KEY’ key = Base64.encode64(username + “:” + api_key) headers = {“Authorization” => “Bearer #{key}”, “Content-Type” => “application/json”} response = RestClient.get ‘https://api.sendgrid.com/v3/templates’, headers 返回…… RestClient::Unauthorized: 401 Unauthorized: {“errors”:[{“field”:null,”message”:”authorization required”}]} 使用其API的最终目标是添加联系人 。 我怎么错误地提出这个请求?

用于双向ssl身份validation的Ruby客户端

我有java web服务支持2路ssl auth 。 所以我在可信商店中拥有服务器证书的客户端密钥存储区( client.p12 )和在受信任存储区中具有客户端证书的服务器密钥存储区。 我可以使用浏览器或邮递员轻松调用我的服务(只需要在浏览器证书管理中导入client.p12 )但我遇到了ruby客户端的问题。 我目前的版本: require ‘rest_client’ p12 = OpenSSL::PKCS12.new(File.read(‘client.p12’), ‘password’) client = RestClient::Resource.new(‘https://localhost:8080/service’, :ssl_client_cert => p12.certificate, :ssl_cert_key => p12.key, :verify_ssl => OpenSSL::SSL::VERIFY_NONE, :ssl_version => ‘TLSv1_2’, :ssl_ciphers => ‘ECDHE-RSA-AES128-GCM-SHA256′).get 失败了: connect_nonblock’: SSL_connect SYSCALL returned=5 errno=0 state=unknown state (OpenSSL::SSL::SSLError) 我的客户端代码有什么问题? openssl s_client输出: $ openssl s_client -connect localhost:8080 …. SSL-Session: Protocol : […]

使用rest-client ruby​​ gem在elasticsearch get请求中传递json数据

如何使用rest client执行以下查询(在doc中给出)。 curl -XGET ‘http://localhost:9200/twitter/tweet/_search’ -d ‘{ “query” : { “term” : { “user” : “kimchy” } } } ‘ 我试过这样做: q = ‘{ “query” : { “term” : { “user” : “kimchy” } } } ‘ r = JSON.parse(RestClient.get(‘http://localhost:9200/twitter/tweet/_search’, q)) 这引发了一个错误: in `process_url_params’: undefined method `delete_if’ for # (NoMethodError) from /home/socialapps/.rvm/gems/ruby-1.9.3-p194/gems/rest-client-1.6.7/lib/restclient/request.rb:40:in `initialize’ from /home/socialapps/.rvm/gems/ruby-1.9.3-p194/gems/rest-client-1.6.7/lib/restclient/request.rb:33:in […]

RestClient.get返回证书validation失败

我正在使用RestClient和Ruby v.2.2.1尝试使用内部测试API服务器。 这基本上是代码: url = “https://10.10.0.10/thing/i/want/to/get” header = { :content_type => “application/json”, :”x-auth-token” => “testingtoken” } response = RestClient.get url, header 这是我收到的失败消息: SSL_connect returned=1 errno=0 state=SSLv3 read server certificate B: certificate verify failed (RestClient::SSLCertificateNotVerified) 如果我正确阅读,看起来Ruby无法接受SSL安全证书。 此调用适用于Chrome应用Postman,但为了使其正常工作,我必须点击Chrome中的url并接受连接不安全(但仍然继续),然后它将在邮递员中工作。 有没有办法忽略证书失败并继续在Ruby中继续?

在RSpec中记录RestClient响应

我有以下规格…… describe “successful POST on /user/create” do it “should redirect to dashboard” do post ‘/user/create’, { :name => “dave”, :email => “dave@dave.com”, :password => “another_pass” } last_response.should be_redirect follow_redirect! last_request.url.should == ‘http://example.org/dave/dashboard’ end end Sinatra应用程序上的post方法使用rest-client调用外部服务。 我需要以某种方式存根其余的客户端调用以发回预设的响应,因此我不必调用实际的HTTP调用。 我的申请代码是…… post ‘/user/create’ do user_name = params[:name] response = RestClient.post(‘http://localhost:1885/api/users/’, params.to_json, :content_type => :json, :accept => :json) if response.code […]