要在没有阻止表单的情况下执行Net :: HTTP https请求,您可以执行以下操作:
...
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
...
Run Code Online (Sandbox Code Playgroud)
但有没有办法告诉Net :: HTTP在执行块表单时使用https?
u = URI.parse(url)
Net::HTTP.start(u.host, u.port) do |http|
# if I put http.use_ssl = true here, ruby complains that this can't
# be done becuase the sesion has already started
resp = http.get(u.request_uri)
end
Run Code Online (Sandbox Code Playgroud)
我在红宝石1.8.7上
我使用net/http并json进行地理编码使用谷歌的地理编码API的地址.这是抛出错误的地方:
response = Net::HTTP.get_response(URI.parse(url))
result = JSON.parse(response)
Run Code Online (Sandbox Code Playgroud)
响应是Net :: HTTPOK类,但我想访问实际的JSON响应数据(而不仅仅是状态代码).
我看到Go本身有一个包net/http,足以提供启动和运行自己的REST API所需的一切.然而,有各种各样的框架,最流行的可能是大猩猩.
考虑到我需要做的主要事情之一是构建REST API,它通常会访问一些后端存储(数据库,缓存等)以执行CRUD操作,是否适合使用Go的标准库本身或者我应该考虑使用一些框架?
通常,人们编写新的库或框架来解决现有库中存在的问题.但是,当实际需求很简单时,许多框架也会使事情变得更糟.
所以我几乎没有问题:
go lang中的基本库是否足以支持REST的基本到中等功能?
如果我最终使用内置库并且明天必须改变它以使用某些框架(如大猩猩)那么努力将是多么困难/昂贵?
框架是真正解决问题还是只是简单地解决问题?
我非常感谢有人在这里分享他的想法(他自己做出这个选择),而我更多地研究自己的想法.
我试图从URL解析XML文件.当我尝试这样的事情时:
require 'net/http'
require 'rubygems'
require 'xmlsimple'
url = 'http://my-address.com/xmltest/note.xml'
xml_data = Net::HTTP.get_response(URI.parse(url)).body
Run Code Online (Sandbox Code Playgroud)
一切正常,但只有当我在Rails项目之外这样做时.如果我尝试在我的Rails 3项目中包含此文件并在那里解析它,我会收到错误"Errno::ECONNREFUSED in [controller]" - Connection refused - connect(2).
我的问题如下:我不知道如何安装net/http组件.我在http://www.rubygems.org上寻找它,但我找不到它.
require 'net/http'
require 'rubygems'
require 'json'
url = URI.parse('http://www.xyxx/abc/pqr')
resp = Net::HTTP.get_response(url) # get_response takes an URI object
data = resp.body
puts data
Run Code Online (Sandbox Code Playgroud)
这是我在ruby中的代码,resp.data以xml格式提供数据.
rest api默认返回xml数据,如果header content-type是application/json,则返回json.
但我想要json形式的数据.为此我必须设置header ['content-type'] ='application/json'.
但我不知道,如何使用get_response方法设置标头.获取json数据.
我目前正在开发一个Rails应用程序,我需要动态地将XML请求发送到外部Web服务.我以前从未这样做过,我有点失落.
更准确地说,我需要在订单状态更新时向我的后勤合作伙伴发送请求.例如,当确认订单时,我需要发送客户地址,取件地址等数据......
我打算使用XML构建器动态生成请求,并根据此示例使用 Net:HTTP或HTTParty发布请求.
这是正确的方法吗?如何在控制器外生成XML请求,然后在HTTParty或Net:HTTP中使用它?
谢谢你的帮助,
克莱姆
出于某种原因,在我的开发机器上,我对通过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
Run Code Online (Sandbox Code Playgroud)
如您所见,响应耗时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
Run Code Online (Sandbox Code Playgroud)
瞬间.是什么赋予了?我猜这是Ruby和OpenSSL之间的某些配置问题.我重新安装了两个(使用Ruby 2.2.1和OpenSSL 1.0.2a),我正在使用OS X Yosemite 10.10.2来获取它的价值.重新安装了我的所有宝石,但问题仍然存在.我尝试更改我的DNS设置以防万一,但没有骰子.有没有其他我可以看到的或我可以改变的任何配置将解决这个问题?
我有一个页面,有时加载超过一分钟.假设这是预期的行为并且不会改变.在这些情况下,我明白了Net::ReadTimeout.
请注意,这是在通过单击上一页上的按钮而不是ajax请求导航到页面之后.因此Capybara.using_wait_time没有帮助.
我尝试了一些激进的东西(其中一些我知道不会起作用),如:
page.driver.browser.manage.timeouts's 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不可知解决方案.如果没有 - 我正在使用硒.
我们最近更新了我们网站的SSL证书,并在Mac OS El Capitan 10.11.3上发生以下情况:
require 'net/http'
Net::HTTP.get URI('https://www.google.com')
# => "<HTML>...</HTML>"
# The site whose certificate got renewed
Net::HTTP.get URI('https://www.example.com')
# => OpenSSL::SSL::SSLError: SSL_connect returned=1 errno=0 state=error: certificate verify failed
Run Code Online (Sandbox Code Playgroud)
我在Google和StackOverflow上的所有搜索都提出了表明Ruby安装存在问题的答案,但它们似乎与较旧的Ruby版本有关,我认为这不是这种情况.这是我尝试过的:
brew updatebrew upgrade opensslrvm osx-ssl-certs update allrvm install ruby-2.3.1 --disable-binary --with-openssl-dir="$(brew --prefix openssl)" (之前我没有这个版本)rvm requirementscrlrefresh rpv 根据Uzbekjon的建议,清除OSX系统范围的CRL缓存.我该如何解决这个问题?
笔记:
在BoraMa的帮助下,现在很清楚发生了什么.COMODO添加了一个名为COMODO RSA Certification Authority而不是之前的新根COMODO Certification Authority.新的root用户未在Mac的钥匙串中注册,导致此问题.
我们尝试调试此方法的一种方法是运行:
openssl s_client -connect www.mysite.com:443 …Run Code Online (Sandbox Code Playgroud) 我想使用GO net/http获取页面的内容长度?我可以在终端使用curl -i -X HEAD https://golang.org,然后检查内容长度字段.