Ich kann Ihnen dabei helfen. Es ist eigentlich gar nicht so schwer.
open("http://...", :http_basic_authentication=>[user, password])
Und wenn Sie analysieren möchten, können Sie sogar meinen Crawler anpassen. Hier ist die Hauptmethode drin.
require "open-uri"
require "zlib"
SHINSO_HEADERS = {
'Accept' => '*/*',
'Accept-Charset' => 'utf-8, windows-1251;q=0.7, *;q=0.6',
'Accept-Encoding' => 'gzip,deflate',
'Accept-Language' => 'bg-BG, bg;q=0.8, en;q=0.7, *;q=0.6',
'Connection' => 'keep-alive',
'Cookie' => '',
'From' => '[email protected]',
'Referer' => 'http://svejo.net/',
'User-Agent' => 'Your user agent'
}
def crawl(url_address)
self.errors = Array.new
begin
begin
url_address = URI.parse(url_address)
rescue URI::InvalidURIError
url_address = URI.decode(url_address)
url_address = URI.encode(url_address)
url_address = URI.parse(url_address)
end
url_address.normalize!
stream = ""
timeout(8) { stream = url_address.open(SHINSO_HEADERS) }
if stream.size > 0
url_crawled = URI.parse(stream.base_uri.to_s)
else
self.errors << "Server said status 200 OK but document file is zero bytes."
return
end
rescue Exception => exception
self.errors << exception
return
end
end
url_crawled ist, was Sie am Ende brauchen.
Versuchen Sie, diese Adresse für den Test zu verwenden. https://developer.mozilla.org/en-US/docs/HTTP_access_control
Wenn Ihr Fehler immer noch auftritt, ist Ihr Server möglicherweise nicht korrekt konfiguriert, und Sie sollten das überprüfen.
Und wenn Sie es ernst meinen mit Parsing, dann sollten Sie auch CharGuess gem und Zlib verwenden, um den Inhalt richtig zu lesen und dann die problematischen mit Iconv zu konvertieren. Hier ist ein Beispiel.
if stream.content_encoding.include?('gzip')
document = Zlib::GzipReader.new(stream).read
elsif stream.content_encoding.include?('deflate')
document = Zlib::Deflate.new().deflate(stream).read
#elsif stream.content_encoding.include?('x-gzip') or
#elsif stream.content_encoding.include?('compress')
else
document = stream.read
end
self.charset_guess = CharGuess.guess(document)
Dann verwenden Sie einfach Iconv auf den Inhalt.
Hoffe das hilft dir.
Grüße, Yavor
Danke ich werde das versuchen! – Symba
Net/http unterstützt https, aber Sie müssen das use_ssl Flag auf die Anfrage setzen –
Dank Frederick. Habe dieses Bit jetzt entfernt. –