HttpClient,httpclient.jar包中的,我则喜欢折射成类似于dll以用的形式,知道在哪个namespace下
http://hc.apache.org/httpcomponents-client
可以从这里获取或得到些信息
实现的目标:
1.模拟登录
2.登录之后,模拟提交请求
关键点:
1.session状态保持
2.页面隐藏的属性获取
之前用HttpURLConnection,但未成功,瓶颈在于没有绕过session保持上,最终还是使用HttpClient,实现相对容易些
示例代码
(代码有删减,不见得能够跑通,需要修改)
/**
*
*/
package httpclienttest;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Random;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpClient;
import org.apache.http.client.ResponseHandler;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.cookie.Cookie;
import org.apache.http.impl.client.BasicResponseHandler;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.protocol.HTTP;
import com.alibaba.ccbu.parseelements.ParseTest;
/**
* @author forward
*
*/
public class LoginFormDemo {
public static void DemoLoginTwo() throws Exception {
DefaultHttpClient httpclient = new DefaultHttpClient();
HttpGet httpget = new HttpGet(
http://xxxx.com/xx.htm );
HttpResponse response = httpclient.execute(httpget);
HttpEntity entity = response.getEntity();
System.out.println( " Login form get: " + response.getStatusLine());
if (entity != null ) {
entity.consumeContent();
}
System.out.println( " Initial set of cookies: " );
List < Cookie > cookies = httpclient.getCookieStore().getCookies();
if (cookies.isEmpty()) {
System.out.println( " None " );
} else {
for ( int i = 0 ; i < cookies.size(); i ++ ) {
System.out.println( " - " + cookies.get(i).toString());
}
}
// action=xxx&Password=xxxx
HttpPost httpost = new HttpPost(
"http://localhost/sss " );
List < NameValuePair > nvps = new ArrayList < NameValuePair > ();
nvps.add( new BasicNameValuePair( " LoginId " , "xxxx " ));
nvps.add( new BasicNameValuePair( " Password " , " xxxxx " ));
nvps.add( new BasicNameValuePair( " action " , " xxxx " ));
nvps.add( new BasicNameValuePair( " eventSubmit_doPost " , " xxxx " ));
httpost.setEntity( new UrlEncodedFormEntity(nvps, HTTP.UTF_8));
response = httpclient.execute(httpost);
entity = response.getEntity();
System.out.println( " Login form get: " + response.getStatusLine());
if (entity != null ) {
entity.consumeContent();
}
System.out.println( " Time now: " + new Date().toString());
System.out.println( " -------------------1--------------------- " );
httpget = new HttpGet(http://localhost/test );
System.out.println( " executing request " + httpget.getURI());
// Create a response handler
ResponseHandler < String > responseHandler = new BasicResponseHandler();
String responseBody = httpclient.execute(httpget, responseHandler);
// System.out.println(responseBody);
System.out.println( " Time now: " + new Date().toString());
System.out.println( " -------------------2--------------------- " );
*
*/
package httpclienttest;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Random;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpClient;
import org.apache.http.client.ResponseHandler;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.cookie.Cookie;
import org.apache.http.impl.client.BasicResponseHandler;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.protocol.HTTP;
import com.alibaba.ccbu.parseelements.ParseTest;
/**
* @author forward
*
*/
public class LoginFormDemo {
public static void DemoLoginTwo() throws Exception {
DefaultHttpClient httpclient = new DefaultHttpClient();
HttpGet httpget = new HttpGet(
http://xxxx.com/xx.htm );
HttpResponse response = httpclient.execute(httpget);
HttpEntity entity = response.getEntity();
System.out.println( " Login form get: " + response.getStatusLine());
if (entity != null ) {
entity.consumeContent();
}
System.out.println( " Initial set of cookies: " );
List < Cookie > cookies = httpclient.getCookieStore().getCookies();
if (cookies.isEmpty()) {
System.out.println( " None " );
} else {
for ( int i = 0 ; i < cookies.size(); i ++ ) {
System.out.println( " - " + cookies.get(i).toString());
}
}
// action=xxx&Password=xxxx
HttpPost httpost = new HttpPost(
"http://localhost/sss " );
List < NameValuePair > nvps = new ArrayList < NameValuePair > ();
nvps.add( new BasicNameValuePair( " LoginId " , "xxxx " ));
nvps.add( new BasicNameValuePair( " Password " , " xxxxx " ));
nvps.add( new BasicNameValuePair( " action " , " xxxx " ));
nvps.add( new BasicNameValuePair( " eventSubmit_doPost " , " xxxx " ));
httpost.setEntity( new UrlEncodedFormEntity(nvps, HTTP.UTF_8));
response = httpclient.execute(httpost);
entity = response.getEntity();
System.out.println( " Login form get: " + response.getStatusLine());
if (entity != null ) {
entity.consumeContent();
}
System.out.println( " Time now: " + new Date().toString());
System.out.println( " -------------------1--------------------- " );
httpget = new HttpGet(http://localhost/test );
System.out.println( " executing request " + httpget.getURI());
// Create a response handler
ResponseHandler < String > responseHandler = new BasicResponseHandler();
String responseBody = httpclient.execute(httpget, responseHandler);
// System.out.println(responseBody);
System.out.println( " Time now: " + new Date().toString());
System.out.println( " -------------------2--------------------- " );
// 这里是为了获取页面上的hidden,用来提交的时候继续使用
hidden = ParseTest.testTest(responseBody);
System.out.println(csrfToken);
System.out.println( " Time now: " + new Date().toString());
System.out.println( " ---------------3-post offer begin--------------- " );
// post offer
httpost = new HttpPost(" http://local/test");
host
String keywords = " 001autop " + randomString( 4 );
nvps = new ArrayList < NameValuePair > ();
// post时,提交的form信息
nvps.add( new BasicNameValuePair( " action " , " xxxxx " ));
nvps.add( new BasicNameValuePair( " event_submit_do_process " , " submit " )); nvps.add( new BasicNameValuePair( " topCatFormKey " , " 58 " ));
nvps.add( new BasicNameValuePair( " names1 " , "xxxx" ));
nvps.add( new BasicNameValuePair( "names2 " , " 9.00 " ));
httpost.setEntity( new UrlEncodedFormEntity(nvps, HTTP.UTF_8));
responseHandler = new BasicResponseHandler();
responseBody = httpclient.execute(httpost, responseHandler);
// System.out.println(responseBody);
writeFile( " E:\\result.html " , responseBody);
response = httpclient.execute(httpost);
entity = response.getEntity();
System.out.println( " Login form get: " + response.getStatusLine());
if (entity != null ) {
entity.consumeContent();
}
System.out.println( " Time now: " + new Date().toString());
System.out.println( " ---------------3-post offer end---------------- " );
}
/**
* 产生随机字符串
* */
private static Random randGen = null ;
private static char [] numbersAndLetters = null ;
private static Object initLock = new Object();
public static final String randomString( int length) {
if (length < 1 ) {
return null ;
}
if (randGen == null ) {
synchronized (initLock) {
if (randGen == null ) {
randGen = new Random();
numbersAndLetters = ( " 0123456789abcdefghijklmnopqrstuvwxyz "
+ " 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ " )
.toCharArray();
// numbersAndLetters =
// ("0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ").toCharArray();
}
}
}
char [] randBuffer = new char [length];
for ( int i = 0 ; i < randBuffer.length; i ++ ) {
randBuffer[i] = numbersAndLetters[randGen.nextInt( 71 )];
// randBuffer[i] = numbersAndLetters[randGen.nextInt(35)];
}
return new String(randBuffer);
}
public static void writeFile(String path, String content) {
String s = new String();
String s1 = new String();
try {
File f = new File(path);
if (f.exists()) {
System.out.println( " 文件存在 " );
f.delete();
} else {
}
System.out.println( " 文件不存在,正在创建... " );
if (f.createNewFile()) {
System.out.println( " 文件创建成功! " );
} else {
System.out.println( " 文件创建失败! " );
}
BufferedReader input = new BufferedReader( new FileReader(f));
while ((s = input.readLine()) != null ) {
s1 += s + " \n " ;
}
// System.out.println("文件内容:" + s1);
input.close();
s1 += content;
BufferedWriter output = new BufferedWriter( new FileWriter(f));
output.write(s1);
output.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
hidden = ParseTest.testTest(responseBody);
System.out.println(csrfToken);
System.out.println( " Time now: " + new Date().toString());
System.out.println( " ---------------3-post offer begin--------------- " );
// post offer
httpost = new HttpPost(" http://local/test");
host
String keywords = " 001autop " + randomString( 4 );
nvps = new ArrayList < NameValuePair > ();
// post时,提交的form信息
nvps.add( new BasicNameValuePair( " action " , " xxxxx " ));
nvps.add( new BasicNameValuePair( " event_submit_do_process " , " submit " )); nvps.add( new BasicNameValuePair( " topCatFormKey " , " 58 " ));
nvps.add( new BasicNameValuePair( " names1 " , "xxxx" ));
nvps.add( new BasicNameValuePair( "names2 " , " 9.00 " ));
httpost.setEntity( new UrlEncodedFormEntity(nvps, HTTP.UTF_8));
responseHandler = new BasicResponseHandler();
responseBody = httpclient.execute(httpost, responseHandler);
// System.out.println(responseBody);
writeFile( " E:\\result.html " , responseBody);
response = httpclient.execute(httpost);
entity = response.getEntity();
System.out.println( " Login form get: " + response.getStatusLine());
if (entity != null ) {
entity.consumeContent();
}
System.out.println( " Time now: " + new Date().toString());
System.out.println( " ---------------3-post offer end---------------- " );
}
/**
* 产生随机字符串
* */
private static Random randGen = null ;
private static char [] numbersAndLetters = null ;
private static Object initLock = new Object();
public static final String randomString( int length) {
if (length < 1 ) {
return null ;
}
if (randGen == null ) {
synchronized (initLock) {
if (randGen == null ) {
randGen = new Random();
numbersAndLetters = ( " 0123456789abcdefghijklmnopqrstuvwxyz "
+ " 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ " )
.toCharArray();
// numbersAndLetters =
// ("0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ").toCharArray();
}
}
}
char [] randBuffer = new char [length];
for ( int i = 0 ; i < randBuffer.length; i ++ ) {
randBuffer[i] = numbersAndLetters[randGen.nextInt( 71 )];
// randBuffer[i] = numbersAndLetters[randGen.nextInt(35)];
}
return new String(randBuffer);
}
public static void writeFile(String path, String content) {
String s = new String();
String s1 = new String();
try {
File f = new File(path);
if (f.exists()) {
System.out.println( " 文件存在 " );
f.delete();
} else {
}
System.out.println( " 文件不存在,正在创建... " );
if (f.createNewFile()) {
System.out.println( " 文件创建成功! " );
} else {
System.out.println( " 文件创建失败! " );
}
BufferedReader input = new BufferedReader( new FileReader(f));
while ((s = input.readLine()) != null ) {
s1 += s + " \n " ;
}
// System.out.println("文件内容:" + s1);
input.close();
s1 += content;
BufferedWriter output = new BufferedWriter( new FileWriter(f));
output.write(s1);
output.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}