Tôi chạy vào vấn đề "URL hoạt động trong trình duyệt, nhưng khi tôi làm http-get trong java tôi nhận được một 500 Lỗi".
Trong trường hợp của tôi vấn đề là http-get thường kết thúc trong một vòng lặp vô hạn chuyển hướng giữa /default.aspx và /login.aspx
URL oUrl = new URL(url);
HttpURLConnection con = (HttpURLConnection) oUrl.openConnection();
con.setRequestMethod("GET");
...
int responseCode = con.getResponseCode();
gì đã xảy ra là: Các máy chủ phục vụ lên một cookie ba phần và con.getResponseCode() chỉ sử dụng một trong các phần. Dữ liệu cookie trong tiêu đề trông giống như sau:
header.key = null
value = HTTP/1.1 302 Found
...
header.key = Location
value = /default.aspx
header.key = Set-Cookie
value = WebCom-lbal=qxmgueUmKZvx8zjxPftC/bHT/g/rUrJXyOoX3YKnYJxEHwILnR13ojZmkkocFI7ZzU0aX9pVtJ93yNg=; path=/
value = USE_RESPONSIVE_GUI=1; expires=Wed, 17-Apr-2115 18:22:11 GMT; path=/
value = ASP.NET_SessionId=bf0bxkfawdwfr10ipmvviq3d; path=/; HttpOnly
...
Vì vậy, máy chủ khi chỉ nhận được một phần ba dữ liệu cần thiết đã bị nhầm lẫn: Bạn đã đăng nhập! Không đợi, bạn phải đăng nhập. Không, bạn đã đăng nhập, ...
Để làm việc xung quanh vòng lặp chuyển hướng vô hạn, tôi phải tìm kiếm lại theo cách thủ công và phân tích thủ công tiêu đề cho mục nhập "Đặt cookie".
con = (HttpURLConnection) oUrl.openConnection();
con.setRequestMethod("GET");
...
log.debug("Disable auto-redirect. We have to look at each redirect manually");
con.setInstanceFollowRedirects(false);
....
int responseCode = con.getResponseCode();
Với mã này các phân tích của các tập tin cookie, nếu chúng ta có được một chuyển hướng trong responseCode:
private String getNewCookiesIfAny(String origCookies, HttpURLConnection con) {
String result = null;
String key;
Set<Map.Entry<String, List<String>>> allHeaders = con.getHeaderFields().entrySet();
for (Map.Entry<String, List<String>> header : allHeaders) {
key = header.getKey();
if (key != null && key.equalsIgnoreCase(HttpHeaders.SET_COOKIE)) {
// get the cookie if need, for login
List<String> values = header.getValue();
for (String value : values) {
if (result == null || result.isEmpty()) {
result = value;
} else {
result = result + "; " + value;
}
}
}
}
if (result == null) {
log.debug("Reuse the original cookie");
result = origCookies;
}
return result;
}
500 dành cho lỗi máy chủ nội bộ –
whatur 'theurl' mà bạn đã thử? – sunil
@sunil Tôi đã thử http://www.rassd.com/1-23544.htm – user1069624