日期:2014-05-20  浏览次数:20717 次

怎么获取网页的一部分并在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();
        }
    }


------解决方案--------------------
引用:
以前我也曾想过做一个类似的功能吧。。
后来做了一半因为懒就放弃了。。
验证码识别可以通过某些开放的API图片识别实现,当然得看具体的验证码图片,而且现在这样的API并不好找。当然当初只是搜了一下并没有尝试去做。
至于1楼上说的Apache组件,我在android下的一些用法。我想应该指的是这个吧,

 public static String sendSST2Proxy(HttpEntity entity,String proxy) throws Exception {
        final HttpPost post = new HttpPost(proxy);