如何获取网页的一部分并在gui界面中显示
阅读
一个投票页面,我想用程序读出验证码,把那段代码在图形界面显示出来,然后手动输入进去,选项什么的用程序自动选好,然后再post过去。
因为我看网上说的好多验证码破解不了,所以就半自动投票吧,总比一天只能投一次强吧。
我现在的问题有这些:
1、把验证码显示出来的代码怎么在我的程序里面给显示出来?模拟个浏览器?请大家给个提示和例子,谢谢!
2、一般来说服务器上都会在打开投票页面就有个session,我抓包看到cookie里面有个PHPSESSIONID,这个怎么读取回来?我试了如下的代码:
URL url = new URL("http://192.168.1.2/vote/index.php");
HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
//获得session信息
String session_value = urlConnection.getHeaderField("Set-Cookie");
String[] sessionId = session_value.split(";");
//保存session信息
System.out.println(sessionId[0]);
怎么获取不到啊
------解决方案--------------------
如果还打算显示内容,考虑直接用 SWT 的一个浏览器实现来做吧。
另外,如果不考虑现实内容,而是要做些模拟POST动作之类的,建议用Apache的组件,HttpClient,功能灵活强大得多。比如Cookie信息啥的,都是自动管理的。
------解决方案--------------------
以前我也曾想过做一个类似的功能吧。。
后来做了一半因为懒就放弃了。。
验证码识别可以通过某些开放的API图片识别实现,当然得看具体的验证码图片,而且现在这样的API并不好找。当然当初只是搜了一下并没有尝试去做。
至于1楼上说的Apache组件,我在android下的一些用法。我想应该指的是这个吧,
public static String sendSST2Proxy(HttpEntity entity,String proxy) throws Exception {
final HttpPost post = new HttpPost(proxy);
post.setEntity(entity);
HttpResponse httpResponse = SSLSocketFactoryEx.getNewHttpClient().execute(post);
if (httpResponse.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {
String returnstr = IOHelper.fromIputStreamToString(httpResponse.getEntity().getContent());
Log.i(Constant.LOG_TAG, returnstr);
return returnstr;
}
return null;
}
public static HttpClient getNewHttpClient() {
try {
KeyStore trustStore = KeyStore.getInstance(KeyStore.getDefaultType());
trustStore.load(null, null);
SSLSocketFactory sf = new SSLSocketFactoryEx(trustStore);
sf.setHostnameVerifier(SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER);
HttpParams params = new BasicHttpParams();
HttpProtocolParams.setVersion(params, HttpVersion.HTTP_1_1);
HttpProtocolParams.setContentCharset(params, HTTP.UTF_8);
SchemeRegistry registry = new SchemeRegistry();
registry.register(new Scheme("http", PlainSocketFactory.getSocketFactory(), 80));
registry.register(new Scheme("https", sf, 443));
ClientConnectionManager ccm = new ThreadSafeClientConnManager(params, registry);
return new DefaultHttpClient(ccm, params);
} catch (Exception e) {
return new DefaultHttpClient();
}
}
------解决方案--------------------