HtmlUnit post as cURL
Not quite sure how to use HtmlUnit to poke google as cURL does in the
example script at:
http://code.google.com/apis/gdata/articles/using_cURL.html#authenticating-
clientlogin
which I'd like to do from Java, but am a bit unfamiliar with the HtmlUnit
API. How do I get this more "cURL"-y?
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package auth;
import com.gargoylesoftware.htmlunit.BrowserVersion;
import com.gargoylesoftware.htmlunit.WebClient;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import org.apache.commons.httpclient.NameValuePair;
import org.apache.commons.httpclient.methods.PostMethod;
import static java.lang.System.out;
/**
*
* @author thufir
*/
public class Main {
/**
* simulate:
* curl https://www.google.com/accounts/ClientLogin
-d Email=just_your_username_here_without_at_gmail_dot_com
-d Passwd=your_password_here
-d source=Google-cURL-Example
-d service=reader
*/
private static final String SURL = "https://www.google.com/accounts/
ClientLogin", DUMMY = "http://htmlunit.sourceforge.net";
private static final String source = "Google-cURL-Example";
private static final String service = "reader";
private static String email = "email", passwd = "passwd";
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
try {
googleSIDprogramatically();
} catch (IOException ex) {
Logger.getLogger(Main.class.getName()).log(Level.SEVERE,
null, ex);
}
}
/**
* what's the syntax to declare NameValuePair's as class fields?
* @return
*/
public static List<NameValuePair> parameters() {
List<NameValuePair> parameters = new ArrayList<NameValuePair>();
parameters.add(new NameValuePair(email, "email"));
parameters.add(new NameValuePair(service, "service"));
parameters.add(new NameValuePair(source, "source"));
parameters.add(new NameValuePair(passwd, "passwd"));
return parameters;
}
/**
* how do you send a BrowserVersion with a post?
*
* how do you get a HtmlPage returned from a PostMethod?
*
* is there a better way to pass parameters?
*
* @see http://code.google.com/apis/gdata/articles/
using_cURL.html#authenticating-clientlogin
*
* @throws java.io.IOException
*/
public static void googleSIDprogramatically() throws IOException {
WebClient webClient = new WebClient(BrowserVersion.FIREFOX_2);
PostMethod method = new PostMethod(SURL);
method.addParameters(parameters().toArray(new NameValuePair[]
{})); //?correct? acceptable?
String page = method.getResponseBodyAsString(); //assuming the
//response is String type
out.println(page);
}
}
thanks,
Thufir