我一直在尝试处理java代码中的重定向(302)......我使用的代码
org.apache.commons.httpclient.HttpClient
未声明setRedirectStrategy()
,因此我必须编写自己的重定向实现:
private void loadHttp302Request(HttpMethod method, HttpClient client,
int status, String urlString) throws HttpException, IOException {
if (status!=302)
return;
String[] url = urlString.split("/");
logger.debug("Method -> loadHttp302Request -> Location : " + method.getResponseHeader("Location")
.getValue());
logger.debug("Method -> loadHttp302Request -> Cookies : " + method.getResponseHeader("Set-Cookie")
.getValue());
logger.debug("Method -> loadHttp302Request -> Referrer : " + url[0]+"//"+url[2]);
HttpMethod theMethod = new GetMethod(urlString+method.getResponseHeader("Location")
.getValue());
theMethod.setRequestHeader("Cookie", method.getResponseHeader("Set-Cookie")
.getValue());
theMethod.setRequestHeader("Referrer",url[0]+"//"+url[2]);
int _status = client.executeMethod(theMethod);
logger.debug("Method -> loadHttp302Request -> Status : " + _status);
method = theMethod;
}
执行此操作后,状态代码等于200,因此看起来一切正常,但响应主体和响应流都为空。我已经能够使用wireshark来嗅探TCP流,就Wireshark而言,我从我的重定向代码中收回了整个响应主体......所以我不确定我做错了什么或者下一步要找什么...理想情况如果我可以使用setRedirectStrategy()
会很好,但因为它是客户的代码:p我被困org.apache.commons.httpclient.HttpClient
...
我调试了executeMethod()
并发现当从输入流中读取响应时,它似乎什么也得不到,即使wireshark肯定显示我收到了完整的响应主体。
任何想法都将受到赞赏:)
答案 0 :(得分:1)
method = theMethod;
末尾的 loadHttp302Request
不会做任何有用的事情。当loadHttp302Request
返回时,调用(java)方法中的method
对象指针仍将指向原始的HttpMethod对象。
从theMethod
返回loadHttp302Request
并从中获取响应内容。