我正在尝试访问特定网址
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;
}
});
但我不知道如何用重定向的网址
替换%25C%2C答案 0 :(得分:1)
看起来该网站的网址重写规则已被破坏。如果不是您的网站,您可能需要联系其维护人员并告知他们该问题。
与此同时,您是否有理由不直接使用目标网址(即http://abc.com/**bbb**/w/api.php?...
),避免重定向?
答案 1 :(得分:0)
http.get("http://abc.com/**aaa**/w/api.php?param=timestamp|user&format=xml");
是否有效?
你的意思是“将我重定向到内部的以下网址”?这就像你的网址再次被编码。你可以在HTTPHelper中发布代码吗?我的下面测试代码工作正常。
客户代码:
HttpClient client = new DefaultHttpClient();
HttpGet get = new HttpGet("http://localhost:8080/test/myservlet?param=timestamp%7Cuser&format=xml");
client.execute(get);
Servlet代码:
protected void doGet(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
String param = request.getParameter("param"); //get timestamp|user
String format = request.getParameter("format");
}