Java 尝试使用HttpClient登录网站时可能出现重定向问题

Java 尝试使用HttpClient登录网站时可能出现重定向问题,java,httpclient,Java,Httpclient,我几乎一字不差地复制了Mkyong的ApacheHttpClient示例,除了替换了不推荐的方法和我自己的登录信息(我甚至复制了他的打字错误!): private void sendPost(字符串url,列表后参数) 抛出异常{ post.setParams(params); post.setHeader(“主机”、“accounts.google.com”); post.setHeader(“用户代理”,用户代理); setHeader(“Accept”,“text/html,applica

我几乎一字不差地复制了Mkyong的ApacheHttpClient示例,除了替换了不推荐的方法和我自己的登录信息(我甚至复制了他的打字错误!):

private void sendPost(字符串url,列表后参数)
抛出异常{
post.setParams(params);
post.setHeader(“主机”、“accounts.google.com”);
post.setHeader(“用户代理”,用户代理);
setHeader(“Accept”,“text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8”);
post.setHeader(“接受语言”,“en-US,en;q=0.5”);
setHeader(“Cookie”,getCookies());
post.setHeader(“连接”、“保持活动”);
post.setHeader(“Referer”https://accounts.google.com/ServiceLoginAuth");
post.setHeader(“内容类型”、“应用程序/x-www-form-urlencoded”);
post.setEntity(新的UrlEncodedFormEntity(postParams));
HttpResponse response=client.execute(post);
int responseCode=response.getStatusLine().getStatusCode();
System.out.println(“\n向URL发送'POST'请求:“+URL”);
System.out.println(“Post参数:“+postParams”);
System.out.println(“响应代码:“+responseCode”);
BufferedReader rd=新的BufferedReader(
新的InputStreamReader(response.getEntity().getContent());
StringBuffer结果=新的StringBuffer();
字符串行=”;
而((line=rd.readLine())!=null){
结果。追加(行);
}
System.out.println(result.toString());
}
方法末尾的print语句返回页面已“临时移动”

临时移动临时移动文档已移动。

我相信这是一个重定向,尽管我不能完全确定。以下是主要方法:

public static void main(String[] args) throws Exception {
String url = "https://accounts.google.com/ServiceLoginAuth";
String gmail = "https://mail.google.com/mail/";
CookieHandler.setDefault(new CookieManager());
HttpCilentExample http = new HttpCilentExample();
String page = http.GetPageContent(url);
List<NameValuePair> postParams = 
           http.getFormParams(page, "example@gmail.com","examplePassword"); 
http.sendPost(url, postParams);
System.out.println("past here");
String result = http.GetPageContent(gmail);
System.out.println(result);
}
publicstaticvoidmain(字符串[]args)引发异常{
字符串url=”https://accounts.google.com/ServiceLoginAuth";
字符串gmail=”https://mail.google.com/mail/";
setDefault(新的CookieManager());
HttpCilentExample http=newhttpcilentexample();
String page=http.GetPageContent(url);
列表后参数=
http.getFormParams(第页,“example@gmail.com“,”示例密码“);
http.sendPost(url,postParams);
System.out.println(“过去这里”);
字符串结果=http.GetPageContent(gmail);
系统输出打印项次(结果);
}
代码不处理过去的
String result=http.GetPageContent(gmail)

我相信这与这个问题有关(这是来自)

10.3.3 302发现

如果收到302状态代码以响应其他请求
而不是GET或HEAD,用户代理不能自动重定向 请求,除非用户可以确认,因为这可能
更改发出请求的条件

我试图重写
isRedirected()
方法,但不确定该怎么做。我是要为所有情况返回false,还是检查POST情况的参数

我不确定这是否是整个问题,也不确定我是否正确处理了这个问题


但是,如果有任何解释能帮助我理解在使用代码之前使用Httpclient登录网站的过程,我将不胜感激,您可以使用http客户端邮递员测试您的需求,您将被重定向到哪里?@Taylor
https://accounts.google.com/CheckCookie?chtml=LoginDoneHtml&continue=https%3A%2F%2fcaccounts.google.com%2FManageAccount&;gidl=CAA
,但我不确定它是否是重定向。我在问题中添加了完整的返回检查响应代码。如果是在300年代,那就是重定向。这就是说,根据链接,我猜登录是成功的,谷歌正试图将你的客户端重定向到一个页面,以便推送cookie。注意,continue参数似乎希望在CheckCookie完成后将您推送到ManageCount。你期望得到什么结果?@Taylor从sendPost()方法中,我得到一个302。似乎登录正在工作。我想如果cookies还保留着,我应该可以访问“mail.google.com/mail”上的gmail页面。
public static void main(String[] args) throws Exception {
String url = "https://accounts.google.com/ServiceLoginAuth";
String gmail = "https://mail.google.com/mail/";
CookieHandler.setDefault(new CookieManager());
HttpCilentExample http = new HttpCilentExample();
String page = http.GetPageContent(url);
List<NameValuePair> postParams = 
           http.getFormParams(page, "example@gmail.com","examplePassword"); 
http.sendPost(url, postParams);
System.out.println("past here");
String result = http.GetPageContent(gmail);
System.out.println(result);
}