Pourquoi urllib2.urlopen ne peut pas ouvrir les pages comme « http: // localhost / new-post # commentaire-29 »?
-
05-10-2019 - |
Question
Je suis curieux, comment ça se fait que je reçois une erreur 404 en cours d'exécution de cette ligne:
urllib2.urlopen("http://localhost/new-post#comment-29")
Alors que tout fonctionne bien le surf http: // localhost / new post # 29 commentaire- dans tout navigateur ...
méthode urlopen ne pas urls parse avec "#" en elle?
Tout le monde sait?
La solution
Dans le protocole HTTP, le fragment (à partir #
partir) n'est pas envoyé au serveur à travers le réseau: il est conservé localement par le navigateur et utilisé, une fois est complètement reçu la réponse du serveur, en quelque sorte « localiser visuellement » exactement repérer dans la page à afficher comme « courant » (par exemple, si la page retournée est en HTML, ce sera fait en analysant le code HTML et la recherche du premier drapeau de <a>
approprié).
Ainsi, la procédure est: éliminer le fragment par exemple via urlparse.urlparse
; utiliser le reste pour aller chercher la ressource; analyser de manière appropriée basée sur l'en-tête de type de contenu de la réponse du serveur; puis prendre toutes les mesures visuelles de votre programme ne concerne la « place actuelle » sur la ressource, en fonction de la localisation au sein de la ressource analysable le fragment vous avez retenu dans la première étape.