2012-10-18 6 views
5

Korzystanie HttpClient 4.1.3, pisałem następujący kod:HttpClient Apache HTTP jest throwng 500S ale nie można odtworzyć w przeglądarce

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(/* ... */); 

Że coraz HTTP 500 odpowiedzi (jak stwierdzono w httpResp.getStatusLine().getStatusCode()) z konkretnego adresu URL i wyrzucenie wyjątku.

Chodzi o to, że kiedy przechodzę do "nieudanego" URL-a w przeglądarce, jego działanie przebiega doskonale.

Więc pytam:

  • Could HttpClient być limit czasu, zwarcie cyklu żądanie-odpowiedź i po prostu daje mi HTTP 500?
  • Co jeszcze tu się dzieje? Jak to jest możliwe, aby HttpClient dał mi 500s, gdy przeglądarka wyświetla stronę idealnie idealnie pod tym samym dokładnym adresem URL?

Z góry dziękuję!

+0

Spróbuj przeprowadzić debugowanie żądania za pomocą przeglądarki internetowej. Być może przyczyną problemu jest to, że nie ustawiasz nagłówków oczekiwanych przez serwer. – deadlock

+0

Jaki serwer uderzasz? Włącz rejestrowanie żądań, aby zobaczyć swoje przychodzące żądanie. Czy masz dostęp do dzienników błędów na serwerze? Jeśli zwraca 500, powinny być dzienniki. – jalynn2

+0

@ jalynn2 - w jaki sposób mogę włączyć rejestrację żądania? Czy jest to konstrukt HttpClient, czy też mówisz o czymś takim jak konsola Firebuga? – IAmYourFaja

Odpowiedz

2

Miałem ten sam problem. Mogłem uzyskać dostęp do strony internetowej za pośrednictwem przeglądarki, ale podczas korzystania z klienta http apache, konsekwentnie otrzymałem wewnętrzny błąd serwera http 500. Problemem był nagłówek GET "Content-Type". Miał wartość "multipart/related", której niektóre serwery nie lubią. Zmieniłem go na "text/html" i wszystko działało dobrze.

Mam nadzieję, że to pomoże.

+0

Hey @ cristian.petroaca's Mam ten sam problem, ale zmiana typu zawartości nie pomaga – 2Big2BeSmall

1

Miałem ten sam problem z dostępem do interfejsu API opartego na źródle xml. Problem rozwiązany poprzez ustawienie nagłówka accept na xml i html.

httpGet.setHeader("Accept", "text/html,application/xhtml+xml,application/xml;"); 
Powiązane problemy