[英]Ruby open-uri throws an Bad uri error when I try to get a URL through user input. Why?
[英]Ruby open-uri, returns error when opening a png URL
我正在通過http://manga.bleachexile.com/gantz-chapter-1.html及之后的Gantz漫畫制作爬蟲解析圖像。
在抓取程序嘗試打開圖像之前(第273章),我一直獲得成功:
錯誤的URI(不是URI?): http : //static.bleachexile.com/manga/gantz/273/Gantz[ 0273]_p001[Whatever-Illuminati] .png
但是我猜這個URL是有效的,因為我可以從Firefox打開。
部分代碼:
img_link = nav.page.image_urls.find {|x| x.include?("manga/gantz")}
img_name = RAILS_ROOT+"/public/#{nome}/#{cap}/"+nome+((template).sub('::cap::', cap.to_s).sub('::pag::', i.to_s))
img = File.new( img_name, 'w' )
img.write( open(img_link) {|f| f.read} )
img.close
這不是有效的uri。 uri只能使用某些字符。 順便說一句,像所有瀏覽器一樣,Firefox嘗試為用戶做盡可能多的事情,而不是在看上去不符合標准時抱怨。
它以以下形式有效:
open("http://static.bleachexile.com/manga/gantz/273/Gantz%5B0273%5D_p001%5BWhatever-Illuminati%5D.png") # => #<File:/tmp/open-uri20100226-3342-clj08a-0>
您可以嘗試像這樣逃避它:
uri.gsub(/\/.*/) do |t|
t.gsub(/[^.\/a-zA-Z0-9\-_ ]/) do |c|
"%#{ c[0]<16 ? "0" : "" }#{ c[0].to_s(16).upcase }"
end.gsub(" ", "+")
end
但是請小心,如果網站使用正確的轉義的uri,而您又再次轉義了。 uri不會再指向同一位置了。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.