关于 ruby??:为什么我会从 Nokogiri 收到”错误的状态行”错误?

Why do I get "wrong status line" errors from Nokogiri?

我的 Ruby/Nokogiri 脚本是:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
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

运行此脚本时出现以下错误:

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

但是我的脚本正确写入文件,只是这个错误不断出现。错误是什么意思?


如果不知道您访问的是哪个站点,很难确定,但我怀疑问题不在于 Nokogiri。

http.rb 正在报告错误,这很可能是在抱怨返回的 HTTPd 标头。 http.rb 关心与 HTTPd 服务器的握手,并且会抱怨缺少/格式错误的标头,但它不会关心有效负载。

另一方面,Nokogiri 会关注有效负载,即 HTML。 DOCTYPE 应该是 HTML 有效负载的一部分,所以我怀疑他们的服务器正在发送 HTML DOCTYPE 而不是 MIME doctype,它应该是 "text/html".

在 Ruby 1.8.7 http.rb 文件中,您将在代码中的 2030 处看到以下行:

1
2
3
4
5
def response_class(code)
  CODE_TO_OBJ[code] or
  CODE_CLASS_TO_OBJ[code[0,1]] or
  HTTPUnknownResponse
end

这似乎是生成您所看到的那种消息的可能位置。