Perché urllib2.urlopen non può aprire le pagine come “http: // localhost / new-post # comment-29”?

StackOverflow https://stackoverflow.com/questions/3798422

Domanda

Sono curioso, come mai ottengo 404 errore di esecuzione di questa linea:

urllib2.urlopen("http://localhost/new-post#comment-29")

Mentre tutto funziona bene surf http: // localhost / new-post # comment-29 in qualsiasi browser ...

metodo urlopen non gli URL parsing con "#" in esso?

Qualcuno lo sa?

È stato utile?

Soluzione

Nel protocollo HTTP, il frammento (da # in poi) non viene inviata al server attraverso la rete: è localmente trattenuto dal browser e utilizzata, una volta che la risposta del server è completamente ricevuto, in qualche modo "visivamente individuare" l'esatto individuare nella pagina da visualizzare come "corrente" (ad esempio, se la pagina restituita è in formato HTML, questo sarà fatto analizzando il codice HTML e alla ricerca per la prima adatta bandiera <a>).

Quindi, la procedura è: rimuovere il frammento di esempio via urlparse.urlparse; utilizzare il resto per recuperare la risorsa; analizzare adeguatamente riferiscono intestazione content-type del server di risposta; poi prendere qualsiasi azione visiva tuo programma fa per quanto riguarda il "punto corrente" sulla risorsa, in base alla localizzazione all'interno della risorsa analizzata il frammento si ha mantenuto nel primo passaggio.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top