Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使字符串中的URL可由Ruby的Net::HTTP使用_Ruby_Url - Fatal编程技术网

使字符串中的URL可由Ruby的Net::HTTP使用

使字符串中的URL可由Ruby的Net::HTTP使用,ruby,url,Ruby,Url,Ruby的Net:HTTP需要被提供一个完整的URL,以便它连接到服务器并正确获取文件。完整URL是指包含http://部分和尾部斜杠(如果需要)的URL。例如,Net:HTTP不会连接到如下所示的URL:example.com,但可以连接到http://example.com/. 有没有办法确保某个URL是完整的URL,如果不是,则添加所需的部分 编辑:以下是我正在使用的代码: parsed_url = URI.parse(url) req = Net::HTTP::Get.new(parse

Ruby的Net:HTTP需要被提供一个完整的URL,以便它连接到服务器并正确获取文件。完整URL是指包含http://部分和尾部斜杠(如果需要)的URL。例如,Net:HTTP不会连接到如下所示的URL:example.com,但可以连接到http://example.com/. 有没有办法确保某个URL是完整的URL,如果不是,则添加所需的部分

编辑:以下是我正在使用的代码:

parsed_url = URI.parse(url)
req = Net::HTTP::Get.new(parsed_url.path)
res = Net::HTTP.start(parsed_url.host, parsed_url.port) {|http|
  http.request(req)
}

这将对http/https进行简单检查:

if !(url =~ /^https?:/i)
  url = "http://" + url
end
这可能是一个更通用的处理多协议ftp等

if !(url =~ /^\w:/i)
  url = "http://" + url
end
为了确保parsed_url.path为您提供了正确的值,在没有提供特定路径时,您可以执行以下操作:

req = Net::HTTP::Get.new(parsed_url.path.empty? ? '/' : parsed_url.path)

这将对http/https进行简单检查:

if !(url =~ /^https?:/i)
  url = "http://" + url
end
这可能是一个更通用的处理多协议ftp等

if !(url =~ /^\w:/i)
  url = "http://" + url
end
为了确保parsed_url.path为您提供了正确的值,在没有提供特定路径时,您可以执行以下操作:

req = Net::HTTP::Get.new(parsed_url.path.empty? ? '/' : parsed_url.path)

如果这只是执行示例代码所示的操作,那么openuri将是一种更简单的方法

require 'open-uri'
res = open(url).read

如果这只是执行示例代码所示的操作,那么openuri将是一种更简单的方法

require 'open-uri'
res = open(url).read


在这里,Uri.parse可能会有所帮助@Brian:奇怪的是,URL是用URI.parse解析的,但是如果没有给它一个正确的URL,我就会出错。是的,如果排除HTTP,URI.parse会给你一个URI::Generic对象,而不是URI::HTTP对象。泛型类没有request\u URI方法,因此Net::HTTP阻塞了它。URI.parse在这里可能会有所帮助@Brian:奇怪的是,URL是用URI.parse解析的,但是如果没有给它一个正确的URL,我就会出错。是的,如果排除HTTP,URI.parse会给你一个URI::Generic对象,而不是URI::HTTP对象。泛型类没有请求URI方法,所以Net::HTTP阻塞了它。这非常有效。虽然如果URL需要,我仍然有结尾斜杠的问题。@Mark:我认为只要在Ruby 1.9中的Net::HTTP上测试过,就不需要结尾斜杠,只要我尝试不使用斜杠,我得到以下错误:/Users/mark/.rvm/rubies/ruby-1.9.2-head/lib/ruby/1.9.1/net/http.rb:1660:in initialize::http请求路径为空ArgumentError from/Users/mark/.rvm/rubies/ruby-1.9.2-head/lib/ruby/1.9.1/net/http.rb:1779:in initialize'from/Users/mark/Dropbox/prog/ruby/dl/dl/dl/dl.rb:9:in new'from/Users/mark/Dropbox/prog/ruby/dl/lib/dl/dl.rb:9:in下载自./dl:40:in``你能用你使用的确切代码更新你的问题吗?@mark:查看我更新的答案。请注意,当您只使用res=Net::HTTP.getparsed_url时,您不需要担心后面的斜杠。这非常有用。虽然如果URL需要,我仍然有结尾斜杠的问题。@Mark:我认为只要在Ruby 1.9中的Net::HTTP上测试过,就不需要结尾斜杠,只要我尝试不使用斜杠,我得到以下错误:/Users/mark/.rvm/rubies/ruby-1.9.2-head/lib/ruby/1.9.1/net/http.rb:1660:in initialize::http请求路径为空ArgumentError from/Users/mark/.rvm/rubies/ruby-1.9.2-head/lib/ruby/1.9.1/net/http.rb:1779:in initialize'from/Users/mark/Dropbox/prog/ruby/dl/dl/dl/dl.rb:9:in new'from/Users/mark/Dropbox/prog/ruby/dl/lib/dl/dl.rb:9:in下载自./dl:40:in``你能用你使用的确切代码更新你的问题吗?@mark:查看我更新的答案。请注意,当您只使用res=Net::HTTP.getparsed_url时,您不需要担心后面的斜杠。一旦我开始使用它,我就再也不回头了。有时需要Net::HTTP,因为我们需要更好的控制,但99%的时间我都在使用open-uri.com。一旦我开始使用它,我就再也不回头了。有时需要Net::HTTP,因为我们需要更好的控制,但99%的时间我都在使用openuri。