При загрузке веб-страницы: “неопределенный метод 'request_uri' для #\”

Я пытаюсь использовать Ruby, чтобы загрузить веб-страницу по HTTP и проверить, каков его код статуса. Мой код похож на это:

  require "net/http"
  @r = Net::HTTP.get_response(URI.parse(myURL))
  return @r.code

Однако для некоторых URL (главным образом, указывающие на странный материал как счетчики посетителей, которые не дадут надлежащий ответ), я добираюсь undefined method request_uri for # исключение. Я проследил его для выравнивания 380 из http.rb (я выполняю Ruby 1.8), где это говорит:

def HTTP.get_response(uri_or_host, path = nil, port = nil, &block)
  if path
    host = uri_or_host
    new(host, port || HTTP.default_port).start {|http|
      return http.request_get(path, &block)
    }
  else
    uri = uri_or_host
    new(uri.host, uri.port).start {|http|
      return http.request_get(uri.request_uri, &block) <--- LINE 380
    }
  end
end

Я вполне потерян относительно того, что вызывает это исключение. Я ожидал бы a URI::InvalidURIError, но не это.

17
задан Zarkonnen 18 February 2010 в 21:00
поделиться

2 ответа

Учитывая распознанную схему (например, http / https), будет создан более специализированный класс. В противном случае создается «общий» URI; идея «URI запроса» имеет смысл только для некоторых схем URI.

Пример:

irb(main):001:0> require 'uri'
=> true
irb(main):002:0> URI.parse('http://www.google.com/').class
=> URI::HTTP
irb(main):003:0> URI.parse('https://www.google.com/').class
=> URI::HTTPS
irb(main):004:0> URI.parse('foo://www.google.com/').class
=> URI::Generic
irb(main):005:0> URI.parse('http://www.google.com/').respond_to?(:request_uri)
=> true
irb(main):006:0> URI.parse('https://www.google.com/').respond_to?(:request_uri)
=> true
irb(main):007:0> URI.parse('foo://www.google.com/').respond_to?(:request_uri)
=> false

Итак, один из анализируемых вами URI имеет странную схему - хотя это действительный URI - вот и все.

31
ответ дан 30 November 2019 в 12:27
поделиться
  1. Пользователь B знает, что при запуске обновления или попытке зафиксировать сервер произошли изменения.
  2. Этот процесс называется слиянием. Большинство систем очень умны и пытаются объединиться для вас. Однако иногда возникают конфликты, и в этом случае человека информируют и просят разрешить конфликт. Это произойдет, если лица A и B изменят одну и ту же строку кода в одном и том же файле.
-121--4195924-

Хорошо для Git, вы в основном копируете весь проект из «главной» ветви в свою собственную личную ветвь, где вы можете изменять и вносить изменения в свою личную ветвь, и если вы думаете, что это хорошо, вы можете объединить свою личную ветвь с главной.

-121--4195926-

Прежде всего, относительно того, почему это # , я предполагаю, что эта ошибка появляется в браузере и поэтому считается HTML. Попробуйте просмотреть источник и проверить, не # < ObjectWhather > .

Что касается ошибки, это звучит правильно. Это означает, что используемый URI-объект не имеет метода request _ uri . Может быть, вы хотели использовать путь ?

0
ответ дан 30 November 2019 в 12:27
поделиться
Другие вопросы по тегам:

Похожие вопросы: