Tag: net http

使用Ruby的Net / HTTP模块,我可以发送原始JSON数据吗?

与通过Fiddler发送数据和请求相比,我一直在研究通过Ruby HTTP请求发送JSON数据的主题。 我的主要目标是找到一种方法,使用Ruby在HTTP请求中发送嵌套的数据哈希。 在Fiddler中,您可以在请求正文中指定JSON并添加标题“Content-Type:application / json”。 在Ruby中,使用Net / HTTP,如果可能,我想做同样的事情。 我有一种预感,这是不可能的,因为在Ruby中将JSON数据添加到http请求的唯一方法是使用set_form_data ,它需要哈希中的数据。 在大多数情况下这很好,但是这个函数没有正确处理嵌套的哈希值(参见本文中的注释 )。 有什么建议?

使用Ruby将XML请求发布到Web服务器

我担心我在Web服务器上发布文档(例如XML)的经验不多,所以如果我对HTTP的理解不足,我会道歉。 我在127.0.0.1端口2000上的ruby应用程序中设置了一个基本的Mongrel Web服务器。 (服务器)。 我在同一台计算机上运行一个单独的Ruby应用程序。 (客户端)。 我需要客户端将XML文档POST到服务器。 我曾尝试使用Net :: HTTP来做到这一点,但我找不到一个明确的例子,告诉我应该做些什么。 我有一个去,但遇到了错误。 我已经打破了请求,使其尽可能基本: http = Net::HTTP.new(“127.0.0.1”, 2000) http.post(‘file’, ‘query=foo’) #xc.rb line 6 但它会导致以下错误 C:/Ruby193/lib/ruby/1.9.1/net/protocol.rb:141:in `read_nonblock’: An existing connection was forcibly closed by the remote host. (Errno::ECONNRESET) from C:/Ruby193/lib/ruby/1.9.1/net/protocol.rb:141:in `rbuf_fill’ from C:/Ruby193/lib/ruby/1.9.1/net/protocol.rb:122:in `readuntil’ from C:/Ruby193/lib/ruby/1.9.1/net/protocol.rb:132:in `readline’ from C:/Ruby193/lib/ruby/1.9.1/net/http.rb:2562:in `read_status_line’ from C:/Ruby193/lib/ruby/1.9.1/net/http.rb:2551:in `read_new’ from C:/Ruby193/lib/ruby/1.9.1/net/http.rb:1319:in `block in transport_request’ […]

Net :: HTTP对HTTPS请求的响应非常慢

出于某种原因,在我的开发机器上,我对通过Net :: HTTP执行的HTTPS请求的响应非常非常慢。 我尝试过RestClient和HTTParty,他们都有同样的问题。 它似乎无处不在。 我已经毫无问题地提出了数百次这些请求,但今天它们的速度令人难以忍受。 pry(main)> puts Time.now; HTTParty.get(‘https://api.easypost.com/v2/addresses’); puts Time.now; 2015-04-29 08:07:08 -0500 2015-04-29 08:09:39 -0500 如您所见,响应耗时2.5分钟。 而且不只是这个EasyPost API URL。 我已经尝试过多次SSL请求到我知道可以连接的服务器( https : //google.com,https://weather.com等),它们都会导致相同的行为。 此外,我注意到从HTTP重定向到HTTPS的请求也会发生同样的情况。 现在,查看非ssl请求: pry(main)> puts Time.now; HTTParty.get(‘http://lookitsatravis.com’); puts Time.now; 2015-04-29 08:12:22 -0500 2015-04-29 08:12:22 -0500 瞬间。 是什么赋予了? 我猜这是Ruby和OpenSSL之间的某些配置问题。 我重新安装了两个(使用Ruby 2.2.1和OpenSSL 1.0.2a),我正在使用OS X Yosemite 10.10.2来获取它的价值。 重新安装了我的所有gem,但问题仍然存在。 我尝试更改我的DNS设置以防万一,但没有骰子。 有没有其他我可以看到的或我可以改变的任何配置将解决这个问题?

Capybara增加最大允许页面加载时间

我有一个页面,有时加载超过一分钟。 假设这是预期的行为并且不会改变。 在这些情况下,我得到Net::ReadTimeout 。 请注意,这是在通过单击上一页上的按钮而不是ajax请求导航到页面之后。 因此, Capybara.using_wait_time没有帮助。 我尝试了一些激进的东西(其中一些我知道不会起作用),如: 设置page.driver.browser.manage.timeouts的implicit_wait , script_timeout和page_load 。 循环遍历整个对象空间并设置所有Selenium::WebDriver::Remote::Http::Default的timeout值。 循环遍历整个对象空间并设置所有Net::HTTP的read_timeout 。 page.driver.browser.send(:bridge).http.instance_variable_get(:@http).read_timeout= 似乎没有工作。 这应该是非常微不足道的,但我找不到办法。 如果你知道一个很棒的webdriver不可知解决方案。 如果没有 – 我正在使用selenium 。

在Rails中使用NetHTTP来命中Rails

我们有一个非常独特的用例,我们希望Rails控制器使用Net :: HTTP访问Rails应用程序中的路由。 可以这样做吗? 我正在尝试这样做时收到超时。 当uri是一个单独的Rails应用程序时,当前代码有效,但当uri属于应用程序本身时则不行。 这是当前控制器操作的要点: def export_data uri = URI(“http://localhost:3000”) @data = JSON.parse( Net::HTTP.get(uri) ) respond_to do |format| … end end 忘记我们为什么要这样做。 为什么这不起作用? 是否可以进行修改以使其工作? 提前致谢!

使用ruby Net:HTTP API将文件上载到远程apache服务器失败,发生409冲突

下面是一个将文件从本地文件系统上传到远程Apache服务器的程序。 该程序以409冲突错误结束。 有什么建议我做错了吗? 我在httpd.conf中启用了DAV并提供了所有必要的权限,但我仍然没有运气。 如果需要,我可以发布httpd.conf。 这是代码: BOUNDARY = “AaB03xZZZZZZ11322321111XSDW” uri = URI.parse(“http://localhost/dropbox/”) file = “/tmp/KEYS.txt” http = Net::HTTP.new(uri.host, uri.port) request = Net::HTTP::Put.new(uri.request_uri) request.body_stream=File.open(file) request[“Content-Type”] = “multipart/form-data” request.add_field(‘Content-Length’, File.size(file)) request.add_field(‘session’, BOUNDARY) response=http.request(request) puts “Request Headers: #{request.to_hash.inspect}” puts “Sending PUT #{uri.request_uri} to #{uri.host}:#{uri.port}” puts “Response #{response.code} #{response.message}” puts “#{response.body}” puts “Headers: #{response.to_hash.inspect}” 它的输出: Request Headers: {“accept”=>[“*/*”], “host”=>[“localhost”], […]

干净安装后持久的Ruby segfaulting

当使用Koala gem通过HTTP进行通信时,Ruby会保持segfaulting: /Users/pawel/.rvm/rubies/ruby-1.9.3-p0/lib/ruby/1.9.1/net/http.rb:799: [BUG] Segmentation fault 我尝试过以下方法: 运行which -a ruby ,通过MacPorts显示多个ruby。 所以我删除了那些并再次运行相同的命令只返回/usr/bin/ruby 我删除了PostgreSQL的MacPorts版本并用Homebrew安装了它(使用MacPorts,它安装了自己的OpenSSL版本) 运行openssl version将返回OpenSSL 1.0.0g 18 Jan 2012 我从RVM中删除了Ruby 1.9.3并尝试了下面没有用的Luciano方法。 我也尝试从RVM重新安装1.9.3并指定–with-openssl-dir=/opt/local因为which openssl返回/opt/local/bin/openssl 我重新安装了RVM(它现在是/Users/pawel/.rvm/bin/rvm的版本1.10.2) 我已经升级到Ruby 1.9.3-p125并且还尝试过1.9.2 我按照这里的说明进行了操作: http : //www.christopherirish.com/2011/09/02/ruby-1-9-2-segmentation-fault-and-openssl/ (实际上是我上面的步骤)。 我也读过克里斯托弗先前的post。 在我运行以下项目的项目目录中,我得到了预期的0 。: ruby -rubygems -e” require ‘eventmachine’; require ‘openssl’ “; echo $? 我试过sudo port -f deactivate openssl但是当我尝试启动Rails服务器时,我得到的Library not loaded: /opt/local/lib/libssl.1.0.0.dylib 关于我还能尝试什么,或者我错过了什么,我需要更多的想法。

调整Nokogiri连接的超时

为什么nokogiri在服务器繁忙时等待几秒钟(3-5)并且我一个接一个地请求页面,但是当这些请求处于循环中时,nokogiri不会等待并抛出超时消息。 我正在使用超时块包装请求,但nokogiri根本不等待那个时间。 有关此的任何建议程序? # this is a method from the eng class def get_page(url,page_type) begin timeout(10) do # Get a Nokogiri::HTML::Document for the page we’re interested in… @@doc = Nokogiri::HTML(open(url)) end rescue Timeout::Error puts “Time out connection request” raise end end # this is a snippet from the main app calling eng class # receives […]

使用OpenURI或net / http进行Ruby代理身份validationGET / POST

我正在使用ruby 1.9.3并尝试使用open-uri获取url并尝试使用Net:HTTP发布 我试图使用代理身份validation: 尝试使用net/http执行POST请求: require ‘net/http’ require ‘open-uri’ http = Net::HTTP.new(“google.com”, 80) headers = { ‘User-Agent’ => ‘Ruby 193’} resp, data = http.post(“/”, “name1=value1&name2=value2”, headers) puts data 对于我无法进行POST open-uri ,我使用: data = open(“http://google.com/”,”User-Agent”=> “Ruby 193”).read 如何修改这些以使用具有HTTP身份validation的代理 我试过(对于open-uri) data = open(“http://google.com/”,”User-Agent”=> “Ruby 193”, :proxy_http_basic_authentication => [“http://proxy.com:8000/”, “proxy-user”, “proxy-password”]).read 但是我得到的只是一个OpenURI::HTTPError: 407 Proxy Authentication Required 。 我已经validation了所有,它在浏览器中使用相同的身份validation和代理详细信息,但我无法做到这一点。 如何修改上面的代码以正确添加http身份validation? […]

使用Net / http发布JSON格式的Ruby数据

我有这个ruby文件: require ‘net/http’ require ‘json’ require ‘uri’ #test data newAcctJson ='{ “type”: “Credit Card”, “nickname”: “MoreTesting”, “rewards”: 2, “balance”: 50 }’ #creates a new account def createAcct(custID, json) url = “http://api.reimaginebanking.com:80/customers/#{custID}/accounts?key=#{APIkey}” uri = URI.parse(url) http = Net::HTTP.new(uri.host, uri.port) myHash = JSON.parse(json) resp = Net::HTTP.post_form(uri, myHash) puts(resp.body) end 试图创建一个新帐户。 但是我得到code: 400, invalid fields in account 。 […]