2012-10-18 9 views
5

Utilizzando HttpClient 4.1.3, ho scritto il seguente codice:Apache HttpClient è throwng 500s HTTP, ma non è in grado di riprodurre in un browser

HttpClient httpClient = HttpClientFactory.newHttpClient(); 
HttpGet httpGet = new HttpGet("some/url/to/hit"); 
HttpResponse httpResp = httpClient.execute(httpGet); 
int statusCode = httpResp.getStatusLine().getStatusCode(); 
if(statusCode != HttpStatus.SC_OK) 
    throw new Exception(/* ... */); 

che sta diventando HTTP 500 risposte (come si trova nel httpResp.getStatusLine().getStatusCode()) da un particolare URL e lanciare l'eccezione.

Il fatto è che quando si passa all'URL "in errore" in un browser, funziona perfettamente.

Allora io mi chiedo:

  • Potrebbe essere HttpClient timeout, cortocircuitando il ciclo di richiesta-risposta, e solo a me dare un HTTP 500?
  • Cos'altro potrebbe succedere qui? Come è possibile che HttpClient mi dia 500 se il browser sta visualizzando perfettamente la pagina per lo stesso URL esatto?

Grazie in anticipo!

+0

Provare a eseguire il debug della richiesta dal browser web. Forse ciò che causa il tuo problema è che non stai impostando le intestazioni previste dal server. – deadlock

+0

Quale server stai colpendo? Attiva la registrazione delle richieste per vedere la tua richiesta in arrivo. Hai accesso ai log degli errori sul server? Se restituisce un 500, dovrebbero esserci dei log. – jalynn2

+0

@ jalynn2 - Come accendere la registrazione delle richieste? È un costrutto HttpClient o stai parlando di qualcosa come la console di Firebug? – IAmYourFaja

risposta

2

Ho avuto lo stesso problema. Potrei accedere a un sito Web tramite il browser, ma quando utilizzo il client http Apache, ho costantemente ricevuto l'errore del server interno http 500. Il problema era l'intestazione GET "Content-Type". Aveva il valore "multipart/related", che alcuni server non sembrano gradire. L'ho cambiato in "text/html" e tutto ha funzionato bene.

Spero che questo aiuti.

+0

Hey @ cristian.petroaca Ho lo stesso problema ma cambiare il tipo di contenuto non aiuta – 2Big2BeSmall

1

Ho avuto lo stesso problema accedendo a una xml basata su molla. Il problema risolto impostando l'intestazione accept su xml e html.

httpGet.setHeader("Accept", "text/html,application/xhtml+xml,application/xml;"); 
Problemi correlati