Почему я получаю ошибки "неправильной строки состояния" от Nokogiri? - PullRequest
0 голосов
/ 25 ноября 2011

Мой скрипт на Ruby / Nokogiri:

require 'rubygems'
require 'nokogiri'
require 'open-uri'

f = File.new("enterret" + ".txt", 'w')

1.upto(100) do |page|
  urltext = "http://xxxxxxx.com/" + "page/"
  urltext << page.to_s + "/"
  doc = Nokogiri::HTML(open(urltext))
  doc.css(".photoPost").each do |post|
    quote = post.css("h1 + p").text
    author = post.css("h1 + p + p").text
    f.puts "#{quote}" + "#{author}"
    f.puts "--------------------------------------------------------"
  end
end

При запуске этого скрипта я получаю следующую ошибку:

http.rb:2030:in `read_status_line': wrong status line: "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\"" (Net::HTTPBadResponse)

Однако мой скрипт пишет в файл правильно, просто этоошибка продолжает появляться.Что означает ошибка?

1 Ответ

2 голосов
/ 25 ноября 2011

Не зная, к какому сайту вы заходите, трудно сказать наверняка, но я подозреваю, что проблема не в Нокогири.

Об ошибке сообщает http.rb, что скорее всегожаловаться на возвращаемые заголовки HTTPd.http.rb относится к рукопожатию с HTTPd-сервером и будет жаловаться на отсутствующие / неправильно сформированные заголовки, но его не волнует полезная нагрузка.

Нокогири, с другой стороны, был бы обеспокоен полезной нагрузкой, то есть HTML.Предполагается, что DOCTYPE является частью полезной нагрузки HTML, поэтому я подозреваю, что их сервер отправляет DOCTYPE HTML вместо doctype MIME, который должен быть "text/html".

В Ruby 1.8.7 http.rbВ файле вы увидите следующие строки в 2030 в коде:

def response_class(code)
  CODE_TO_OBJ[code] or
  CODE_CLASS_TO_OBJ[code[0,1]] or
  HTTPUnknownResponse
end

Это, вероятно, место для генерации сообщения, которое вы видите.

...