title: How to login Gmail with Apache's HttpClient?
body: <p>I want to login my gmail and get the contact list automatically with httpClient,
  I've tryed the method described in the page below:
  <a href="https://stackoverflow.com/questions/7175238/android-how-to-login-into-webpage-programmatically-using-httpsurlconnection">Android: How to login into webpage programmatically, using HttpsURLConnection</a>
  but once it ran to: 
      <code>String cookie = response.getFirstHeader("Set-Cookie").getValue();</code> 
  a  java.lang.NullPointerException was catched. 
  I thought it was because the page was moved temporarily, then I coded my code like this:</p>
  
  <pre><code>    private static String uriLogin = "https://mail.google.com";
  private static String uriContacts = "https://mail.google.com/mail/shva=1#contacts";
  
  // the account was registered just for test:
  private static String myAcc = "httpclient.test";
  private static String myPwd = "testpassword";
  
  
  public static void main(String[] args) throws ClientProtocolException,
          IOException, InterruptedException {
      DefaultHttpClient client = new DefaultHttpClient();
      HttpPost post = new HttpPost(uriLogin);
  
      List&lt;NameValuePair&gt; params = new ArrayList&lt;NameValuePair&gt;(3);
      params.add(new BasicNameValuePair("Email", myAcc));
      params.add(new BasicNameValuePair("Passwd", myPwd));
      params.add(new BasicNameValuePair("signIn", "Sign in"));
      post.setEntity(new UrlEncodedFormEntity(params));
      redp("url is:: ", post.getEntity());
      HttpResponse rsp = client.execute(post);
  
      if (rsp.getStatusLine().getStatusCode() &gt;= 400) {// returns 302 if
                                                          // success
          System.err.println("failed to get the web page!!!");
          System.err.println("status: " + rsp.getStatusLine());
          System.exit(-1);
      }
      redp("status is:: ", rsp.getStatusLine());
      redp("heads of rsp :: ", "");
      pHeads(rsp);
      redp("content is:: ", EntityUtils.toString(rsp.getEntity()));
  
      String redirect = rsp.getLastHeader("Location").getValue();
      HttpGet get = new HttpGet(redirect);
      rsp = client.execute(get);
  
      String cookie = rsp.getFirstHeader("Set-Cookie").getValue();
      redp("cookie is:: ", cookie);
  
      HttpGet getContacts = new HttpGet(uriContacts);
      getContacts.setHeader("Cookie", cookie);
      redp("heads of get [contacts]:: ", "");
      pHeads(getContacts);
      client.getConnectionManager().shutdown();
      client = new DefaultHttpClient(); // without these 2 lines,
                                          // "java.lang.IllegalStateException"
                                          // will be catched
      rsp = client.execute(getContacts);
      redp("heads of rsp (new) ::", "");
      pHeads(rsp);
  
      InputStream istream = rsp.getEntity().getContent();
      BufferedReader reader = new BufferedReader(new InputStreamReader(
              istream));
  
      String line;
      p("联系人列表： ");
      while ((line = reader.readLine()) != null) {
          p(line);
      }
      reader.close();
      istream.close();
  
  }// main
  
  public static void pHeads(HttpMessage msg) {
      Header[] headers = msg.getAllHeaders();
      for (int i = 0; i &lt; headers.length; i++)
          p(headers[i].getName() + ": " + headers[i].getValue());
  
  }
  
  public static void p(Object o) {
      System.out.println(o);
  }
  
  public static void redp(String head, Object o) throws InterruptedException {
      System.err.println(head);
      if (o.equals("") || o.equals(null))
          return;
      Thread.sleep(100);
      System.out.println(o);
  }
  </code></pre>
  
  <p>}
  `
  but it still doesn't work...  Any help would be great~~
  [BTW, I saw a some people says on the Internet that httpClient was not very acceptable for this kind of job, could you tell me in what kind of project HttpClient is most used?]</p>