我試圖訪問特定的網址URL重定向錯誤,如果URL中包含保留字符
DefaultHttpClient httpclient = new DefaultHttpClient();
httpclient.getCredentialsProvider().setCredentials(new AuthScope("abc.com", 443),
new UsernamePasswordCredentials("user", "Passwd"));
HTTPHelper http = new HTTPHelper(httpclient);
http.get("http://abc.com/**aaa**/w/api.php?param=timestamp%7Cuser&format=xml");
其中%7C = |
被重定向我到以下網址內部
http://abc.com/**bbb**/w/api.php?param=timestamp%257Cuser&format=xml
正因爲如此,我不能夠得到正確的輸出...
| ==>%7C
%==> %25
%7C == %257C
我想查詢被timestamp|user
但由於循環重定向,它被改爲timestamp%7Cuser
有什麼辦法可以避免這種情況?
我寫我自己的自定義重定向策略也
httpclient.setRedirectStrategy(new DefaultRedirectStrategy() {
public boolean isRedirected(HttpRequest request, HttpResponse response, HttpContext context) {
boolean isRedirect = false;
try {
isRedirect = super.isRedirected(request, response, context);
LOG.info(response.getStatusLine().getStatusCode());
LOG.info(request.getRequestLine().getUri().replaceAll("%25", "%"));
} catch (ProtocolException e) {
e.printStackTrace();
}
if (!isRedirect) {
int responseCode = response.getStatusLine().getStatusCode();
if (responseCode == 301 || responseCode == 302) {
return true;
}
}
return isRedirect;
}
});
但我不知道如何與%7C從重定向的URL代替%25℃
沒有。它拋出IllegalArgumentException – sparkle
我刷新了我的答案 – secondflying
主機「abc.com/**aaa**」被永久移動到其他服務器。我收到301響應,然後重定向到「abc.com/**bbb**」。在重定向時,url再次被編碼。我試圖攔截重定向,並在中間再次進行網址解碼。但無法這樣做.. – sparkle