2012-10-18 6 views
5

Sử dụng HttpClient 4.1.3, tôi đã viết đoạn mã sau:Apache HttpClient được throwng 500s HTTP nhưng không thể tái tạo trong một trình duyệt

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

Đó là nhận HTTP 500 phản ứng (như được tìm thấy trong httpResp.getStatusLine().getStatusCode()) từ một URL cụ thể và ném ngoại lệ.

Vấn đề là khi tôi truy cập URL "không" trong trình duyệt, nó chạy hoàn toàn tốt.

Vì vậy, tôi hỏi:

  • Could HttpClient có thời gian ra ngoài, ngắn mạch các chu kỳ yêu cầu-phản ứng, và chỉ đem lại cho tôi một HTTP 500?
  • Còn điều gì khác có thể xảy ra ở đây? Làm thế nào có thể cho HttpClient được cho tôi 500 khi trình duyệt đang hiển thị trang hoàn toàn tốt cho cùng một URL chính xác?

Xin cảm ơn trước!

+0

Cố gắng gỡ lỗi yêu cầu từ trình duyệt web. Có lẽ điều gây ra vấn đề của bạn là bạn không đặt tiêu đề dự kiến ​​của máy chủ. – deadlock

+0

Máy chủ nào bạn đang truy cập? Bật yêu cầu đăng nhập để xem yêu cầu đến của bạn. Bạn có quyền truy cập vào nhật ký lỗi trên máy chủ không? Nếu nó quay trở lại 500, cần có nhật ký. – jalynn2

+0

@ jalynn2 - làm cách nào để bật tính năng ghi nhật ký yêu cầu? Đây có phải là một cấu trúc HttpClient hoặc bạn đang nói về một cái gì đó giống như giao diện điều khiển của Firebug? – IAmYourFaja

Trả lời

2

Tôi đã gặp vấn đề tương tự. Tôi có thể truy cập một trang web thông qua trình duyệt nhưng khi sử dụng ứng dụng khách apache http, tôi liên tục gặp lỗi máy chủ nội bộ http 500. Vấn đề là tiêu đề GET "Content-Type". Nó có giá trị "multipart/related", mà một số máy chủ dường như không thích. Tôi đã thay đổi nó thành "text/html" và tất cả đều hoạt động tốt.

Hy vọng điều này sẽ hữu ích.

+0

Hey @ cristian.petroaca của tôi có cùng một vấn đề nhưng việc thay đổi loại nội dung không giúp – 2Big2BeSmall

1

Tôi đã gặp sự cố tương tự khi truy cập api mùa xuân xml. Sự cố được giải quyết bằng cách đặt tiêu đề chấp nhận thành xml và html.

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