2010-09-24 5 views
12

qualcuno può gentilmente suggerire cosa sto facendo male qui?
Sto cercando di ottenere la posizione di testa per un determinato URL utilizzando Java qui è il mio codice:non è possibile ottenere la posizione dell'intestazione di risposta utilizzando URLConnection di Java

URLConnection conn = url.openConnection(); 
String location = conn.getHeaderField("Location"); 

è strano dal momento che so per certo l'URL sto riferendosi a restituire un colpo di testa posizione e l'utilizzo metodi come getContentType() o getContentLength() funziona perfettamente

il tuo consiglio è molto apprezzato come sempre :)

Grazie

+0

E +1 per la domanda. –

risposta

14

ForseL'intestazioneviene restituita come parte della risposta di reindirizzamento. Se è così, URLConnection maniglie reindirizzare automaticamente emettendo la seconda richiesta alla risorsa appuntita, quindi è necessario per disattivarlo:

((HttpURLConnection) conn).setInstanceFollowRedirects(false); 

EDIT: Se effettivamente bisogno di un URL del target di reindirizzamento e non fai vuoi disabilitare la gestione del reindirizzamento, puoi invece chiamare getURL() (dopo aver stabilito la connessione).

+1

come un fascino :) –

+0

Grande! Una preziosa aggiunta alla mia piccola base di conoscenza. +1 –

+0

re la tua modifica: è ancora più elegante! grazie –

0

Solo un follow-up a axtavt's risposta ... se l'URL redirect ha più, si potrebbe fare qualcosa di simile per ottenere il link diretto:

String location = "http://www.example.com/download.php?getFile=1"; 
HttpURLConnection connection = null; 
for (;;) { 
    URL url = new URL(location); 
    connection = (HttpURLConnection) url.openConnection(); 
    connection.setInstanceFollowRedirects(false); 
    String redirectLocation = connection.getHeaderField("Location"); 
    if (redirectLocation == null) break; 
    location = redirectLocation; 
} 
Problemi correlati