2016-05-25 3 views
3

Je suis en train d'essayer de télécharger l'image de ce lien:URI :: InvalidURIError tout en essayant de télécharger par URL avec des crochets

http://z.mfcdn.net/store/manga/9/14-116.0/compressed/Bleach-14-116[manga-rain]._manga_rain_bleach_ch116_01.jpg 

Cela génère une exception URI::InvalidURIError.

Après avoir lu autour de débordement de la pile, j'ai essayé (mais pas):

uri = URI.parse(URI.encode(url.strip)) 

safeurl = URI.encode(url.strip) 

je sais que la question a quelque chose à voir avec les navigateurs web étant plus « amical », mais je ne sais pas comment pour obtenir ma demande de faire la même chose.

+0

Les crochets ne sont pas autorisés dans les URI, même si certaines personnes insistent pour les mettre à l'intérieur. Essayez de les remplacer par «% 5b» et «% 5d» respectivement. – tadman

Répondre

2

est ici une sorte de façon bidouille de traiter les caractères non valides dans l'URL:

u = 'http://z.mfcdn.net/store/manga/9/14-116.0/compressed/Bleach-14-116[manga-rain]._manga_rain_bleach_ch116_01.jpg' 
fixed = u.gsub(/[\[\]]/) { '%%%s' % $&.ord.to_s(16) } 

open(fixed) 

Cela devrait faire face à ce problème particulier.

+0

Ça marche, merci beaucoup, mais comment et pourquoi? –

+0

Il rend l'URL conforme aux normes appropriées. Les navigateurs, comme vous l'avez observé, sont extrêmement laxistes quant à ce qui peut aller dans le chemin et les composants de la requête. – tadman