当前位置: 首页 > 知识库问答 >
问题:

可以使用浏览器访问URL,但不能使用工作代码

薛保臣
2023-03-14

我想检查一堆URL是否正常工作。因此,我编写了一些代码(如下所示)来实现这一点。它适用于像谷歌这样的网站。通用域名格式。当我把它应用到我的场景中时,它失败了。

我正在登录虚拟机。从这个虚拟机,我可以在浏览器中打开所需的URL。当我尝试检查是否可以用代码连接到URL时,它失败了。我的代码从文件中获取的URL是正确的,可以在浏览器上运行。因此,排除了URL中的错误。

我的服务器URL如下所示-

ab-web-internal-test-005.myweb.com

如何调试此问题并使代码能够连接到URL?

这是一个例外:

C:/mycode/>ruby LinkTester.rb
C:/Ruby200-x64/lib/ruby/2.0.0/net/http.rb:878:in `initialize': No connection could be made because the target machine actively refused it. -
 connect(2) (Errno::ECONNREFUSED)
        from C:/Ruby200-x64/lib/ruby/2.0.0/net/http.rb:878:in `open'
        from C:/Ruby200-x64/lib/ruby/2.0.0/net/http.rb:878:in `block in connect'
        from C:/Ruby200-x64/lib/ruby/2.0.0/timeout.rb:52:in `timeout'
        from C:/Ruby200-x64/lib/ruby/2.0.0/net/http.rb:877:in `connect'
        from C:/Ruby200-x64/lib/ruby/2.0.0/net/http.rb:862:in `do_start'
        from C:/Ruby200-x64/lib/ruby/2.0.0/net/http.rb:851:in `start'
        from C:/Ruby200-x64/lib/ruby/2.0.0/net/http.rb:582:in `start'
        from C:/Ruby200-x64/lib/ruby/2.0.0/net/http.rb:477:in `get_response'
        from LinkTester.rb:9:in `connect_to_url'
        from LinkTester.rb:38:in `block in <main>'
        from LinkTester.rb:37:in `each'
        from LinkTester.rb:37:in `<main>'

代码-

require "net/http"
require "uri"

def connect_to_url(url)
  response = nil
  encoded_uri = URI.encode(url)
  uri = URI.parse(encoded_uri)

  response = Net::HTTP.get_response(uri)
  http = Net::HTTP.new(uri.host, uri.port)
  response = http.request(Net::HTTP::Get.new(uri.request_uri))

  case http_response
  when Net::HTTPSuccess
    puts  uri + "success"
  when Net::HTTPRedirect
    puts  uri + "success"
  else
    puts uri + "failure"
  end
end

def get_urls(file_path)

  array = Array.new
  file = File.open(file_path, "r")
  file.each_line do |line|
    array << line
  end
  file.close
  return array
end

url_file = "C:/mycode/servers.txt"
url_array = get_urls(url_file);

url_array.each do |url|
  connect_to_url(url)
end

共有2个答案

阎佑运
2023-03-14

根据铁皮人的解释,将尝试使用typhoeus概念来回答:

require 'typhoeus'

File.readlines('C:/mycode/servers.txt').each do |server_uri|
  puts Typhoeus::Request.new(server_uri).run.code
end
江承嗣
2023-03-14

比较浏览器和HTTP代理并不特别有用。浏览器确实使用了类似的底层技术,但是它有很多其他的代码试图像小狗一样有弹性和友好。除非您知道浏览器在尝试向用户呈现有用内容时还会做什么,否则调试URL和HTTP可能会很困难。在IRB中使用OpenURI或提供控制台的其他宝石之一可能会做得更好,或者在命令行中使用cURL,因为这样您可以更好地控制行为。

你的代码没有处理重定向。您使用与成功相同的消息处理重定向响应,这是不正确的,因为它们不是同一事物,但您无法区分哪个是哪个。

HTTP是一个用于创建HTTP服务的低级库,但是,因为它是低级库,所以您必须告诉它如何执行所有操作。如果您正在创建自己的新服务,那么这很好,但是对于检索页面,您可以更轻松地使用OpenURI或其他gem来处理您的访问,这些访问确实实现了重定向,如加铺、台风、HTTPClient、RestClient、HttpParty等。

如果要使用::HTTP,则需要实现完整的重定向处理代码,该代码在留档中给出。

 类似资料:
  • 我正在尝试使用HttpClient从我的代码访问网站: 这是我得到的错误: 我从浏览器检查了证书,它似乎是正确的,具有正确的名称。不确定它从哪里拾取。 如果我使用代理,代码确实有效。在StackOverflow上遇到了很多类似的问题,但在大多数情况下,服务器处于用户的控制之下。就我而言,这是一个已经存在的网站。我只有这个网站才有这个问题。 会不会是我的环境有问题? 更新: 我发现两个网站(和)都有

  • 即使我的帐户可以访问SSMS中的db,并具有sysadmin权限。 检查SQL日志,每当登录失败时,我都可以看到这条消息: 我尝试向和添加,但没有什么不同 但我也试过 以同样的结果

  • 我试图做一个文件上传到一个链接(共享点Rest服务),在chrome浏览器中工作良好,但不是在android WebView。 我知道android webview有很多限制,但我尝试使用以下方法上传一个文件 https://github.com/mgks/os-fileup 它打开浏览器,但它不显示文件名,也不上传任何内容或调用服务,但同样的代码在chrome浏览器中运行良好(请注意,我已经启用

  • 问题内容: 在旋转动画中,只能在Chrome浏览器中使用,而不能在Firefox中使用。为什么? 问题答案: 当前的Firefox实施失败,除非时间值具有单位。使用或。 注意:W3C明确允许数字0(不带单位)作为长度值,但对于其他值则没有这种意义。我个人希望这种情况有所改变,但目前Firefox的行为并不正确。

  • 问题内容: 这通常是由XML声明前的空白引起的,但是它可以是任何文本,例如破折号或任何字符。我说这通常是由空白引起的,因为人们认为空白始终是可忽略的,但事实并非如此。 经常发生的另一件事是UTF-8 BOM(字节顺序标记),如果将文档作为字符流传递给XML解析器而不是字节流,则在将XML声明视为空白之前允许我正在编写一个小型Java程序,以获取给定Google搜索字词的结果数量。出于某种原因,在J

  • 我的群集它不在同一网络中,并且在我的pc和服务器之间有一个隧道。 我有一个错误: org.elasticsearch.client.transport.节点可用异常:没有配置的节点可用