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

时间:2013-12-04 04:21:13

标签: java httpclient

我几乎一字一句地复制了 Mkyong的Apache HttpClient 示例,除了交换弃用的方法和我自己的登录信息(我甚至设法复制他的错别字!):Mkyong's example

private void sendPost(String url, List<NameValuePair> postParams) 
    throws Exception {

post.setParams(params);
post.setHeader("Host", "accounts.google.com");
post.setHeader("User-Agent", USER_AGENT);
post.setHeader("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8");
post.setHeader("Accept-Language", "en-US,en;q=0.5");
post.setHeader("Cookie", getCookies());
post.setHeader("Connection", "keep-alive");
post.setHeader("Referer", "https://accounts.google.com/ServiceLoginAuth");
post.setHeader("Content-Type", "application/x-www-form-urlencoded");

post.setEntity(new UrlEncodedFormEntity(postParams));

HttpResponse response = client.execute(post);

int responseCode = response.getStatusLine().getStatusCode();

System.out.println("\nSending 'POST' request to URL : " + url);
System.out.println("Post parameters : " + postParams);
System.out.println("Response Code : " + responseCode);

BufferedReader rd = new BufferedReader(
            new InputStreamReader(response.getEntity().getContent()));

StringBuffer result = new StringBuffer();
String line = "";
while ((line = rd.readLine()) != null) {
    result.append(line);
}

System.out.println(result.toString());
}

方法结尾处的print语句返回页面已“暂时移动”。

<HTML><HEAD><TITLE>Moved Temporarily</TITLE></HEAD><BODY BGCOLOR="#FFFFFF" TEXT="#000000"><H1>Moved Temporarily</H1>The document has moved <A HREF="https://accounts.google.com/CheckCookie?chtml=LoginDoneHtml&amp;continue=https%3A%2F%2Faccounts.google.com%2FManageAccount&amp;gidl=CAA">here</A>.</BODY></HTML>

我相信这是一个重定向,但我并不完全确定。这是主要方法:

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);
}

代码不会处理过去String result = http.GetPageContent(gmail);

我认为这与问题有关(这来自Handling HttpClient Redirects

  

10.3.3 302发现...

     

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

我试图覆盖isRedirected()方法,但不确定我应该做什么。我是否会针对所有情况返回false,或检查 POST 个案的参数?

我不确定这是否是整个问题,我不确定我是否正确接近这个问题。

但是,如果有任何解释可以帮助我了解使用 Httpclient 登录网站的过程,我将不胜感激。

0 个答案:

没有答案