`

HttpClient实现透过验证码查询

 
阅读更多
通过几天时间还是不能破解掉验证码,但是可以通过人工输入实现,这样并没有达到我想要的结果,但是还是记录下来,供大家参考,

	private static Log log = LogFactory.getLog(HttpClientMail.class);
	
	public static boolean query(String code,String key) {
		boolean result = false;
		String indexurl = "http://app.szaic.gov.cn/CheckPage.WebUI/Index.aspx?PURL=http%3a%2f%2fapp02.szaic.gov.cn%2fWERMIS2.webui%2fWebPages%2fAIC%2fTradeSearch.aspx";
		String sendurl = "http://app02.szaic.gov.cn/WERMIS2.webui/WebPages/AIC/TradeSearch.aspx";
		String codeurl="http://app02.szaic.gov.cn/WERMIS2.webui/WebPages/WebRegUser/CheckCode.aspx";
		try{
			// 需登陆后访问的 Url
			HttpClient httpClient = new HttpClient();
			log.debug("HttpClientLogin.getBroadbandNewNo(): 001: postMethod: ");
			GetMethod getMethod = new GetMethod(indexurl);
			//设置参数
			NameValuePair[] data = { 
					new NameValuePair("PUTL", "http://app02.szaic.gov.cn/WERMIS2.webui/WebPages/AIC/TradeSearch.aspx"),
			 };
			getMethod.setRequestHeader("Accept", "image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, */*");
			getMethod.setRequestHeader("Accept-Encoding","gzip, deflate");
			getMethod.setRequestHeader("Accept-Language", "zh-cn");
			getMethod.setRequestHeader("Connection",	"Keep-Alive");
			getMethod.setRequestHeader("User-Agent", "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; CIBA)");
			getMethod.setQueryString(data);
			//执行
			httpClient.executeMethod(getMethod);
			String getData = new String(getMethod.getResponseBody(),"UTF-8");
			
            //-----------------------------访问首页,获取cookie----------------------------------------------
			
			PostMethod postMethod = new PostMethod(sendurl);
			//设置参数
			NameValuePair[] data1 = { 
					new NameValuePair("hfIp", "121.15.133.155"),
			};
			postMethod.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
            postMethod.setRequestHeader("Referer", indexurl);
			postMethod.setRequestBody(data1);
			httpClient.executeMethod(postMethod);
			//获取cookie
			Cookie[] cookies = httpClient.getState().getCookies();
			String cookie = "";
			for (Cookie c : cookies) {
				cookie += c.toString() + ";";
			}
            getData = new String(postMethod.getResponseBody(),"UTF-8");
            //-----------------------------获取验证码---------------------------------------------
            GetMethod getMethod2 = new GetMethod(codeurl);
            getMethod2.setRequestHeader("cookie",cookie);
			//执行
			httpClient.executeMethod(getMethod2);
			
			code = savegif(getMethod2);
            //------------------------关键字查询操作-------------------------
            PostMethod postMethod1 = new PostMethod(sendurl);
			//设置参数
			NameValuePair[] data2 = { 
					new NameValuePair("__EVENTARGUMENT", ""),
					new NameValuePair("__EVENTTARGET", "txtCheckCode"),
					new NameValuePair("__LASTFOCUS", ""),
					new NameValuePair("__VIEWSTATE", "Zb73qiSbM0qiPYhYIhU/u9IaFjmjc94zZ4OMyL7PGuex366gM1OHJNbPkuAZeWaZjHuqe923Vrjzn6mrgkcG3QUlepbFyvH4YoI24Kn18xBl+SqpQ6lY8hlKjkiPSJm5SleMQd3QDZ37d3qhGpCgOBvMmlrFt1y898uMkbco0whDJqxHRhlOiIIIhlQuOFvCZyq9+LzedTx5DQ+GmSUHgKJ0669O0LcFZMj5PofIl1bGbiRg5JiSjcq8hfovEQo843plLBzUKtdU/oEMvGcBABu19Zk20RpUicTEy56rWMhX1aGk0OcgEdFYieNhPYa0y5G0RjRWqvBXziV+SGUa2rio8EEqEcUoqRgQ3a1P/WIQGzMq8XofT/ACcsp+OWC2p2LguOQkhciqRBRns8I7mwWgiIAJf8pxJ26Jq3pozNECtomCg7jTAGfDftTMZv83gVTFchExwF7r1qCbfQc5Cs/mT1GgLtRMn4nvwOCCGUeCHCVCeyH8nLp16nIAXLpm00xdjbx2m8amwXzOu87tBbiqRejNCJES5e/VqSB42MT8bKs/Y5pxdC6mJ7fyW1RBruXo/1Q54JEANZKrA281OpzlrVks3/X3q4OOCaHrlXBt9znkEA9rgEjkXOF+4muGMgdjerzHZAnY1YKlo04fS7KPojZChQekj77yotEONp++1NU33yuxOSYfYOc="),
					new NameValuePair("ScriptManager1", "upTopBtn|btnOnlyTradeName"),
					new NameValuePair("btnOnlyTradeName","字号查重"),
					new NameValuePair("txtCheckCode",code),
					new NameValuePair("txtTradeName", URLDecoder.decode(key,"UTF-8")),
			};
			postMethod1.setRequestHeader("cookie",cookie);
			postMethod1.getParams().setParameter(HttpMethodParams.HTTP_CONTENT_CHARSET, "utf-8");
			postMethod1.setRequestBody(data2);
			httpClient.getParams().setCookiePolicy(org.apache.commons.httpclient.cookie.CookiePolicy.BROWSER_COMPATIBILITY);
			httpClient.executeMethod(postMethod1);
            getData = new String(postMethod1.getResponseBody(),"UTF-8");
            System.out.println(getData);
            //解析html
            if(getData.indexOf(URLDecoder.decode(key,"UTF-8"))<=0){
            	System.out.println("-------没有找到字号为:" + key +"的记录!");
            	result = false;
            }else{
            	String regex = "(<.+?>|</.+?>| )+";  
				Pattern p = Pattern.compile(regex);  
				String[] array = p.split(getData); 
				String res="";
				for (String s : array) {   
					if ("".equals(s)) {    
						continue;   
					}   
					res  += s +","; 
				} 
				String res_Ary[] = res.split(",");
				for(String r:res_Ary){
					if(r.indexOf(URLDecoder.decode(key,"UTF-8")) > 0){
						System.out.println("您搜索的结果为:" +r);
						break;
					}
				}
            	result = true;
            }
		}catch (Exception e) {
			result = false;
			log.error("---------------------->>>key" + e + "-----------------------error");
		}
		return result;
	}
	public static String savegif(GetMethod getMethod) throws IOException {   
		/*String projectPath = HttpClientMail.class.getResource("").toString().replace("%20", " ").substring(6);
		projectPath = projectPath.split("/WEB-INF/classes/")[0];		
		String excelPath = projectPath + "/file/2008sohu.gif";*/
		
		String excelPath = "c:/code.jpg";
        File storeFile = new File(excelPath);     
        FileOutputStream output = new FileOutputStream(storeFile);     
        //得到网络资源的字节数组,并写入文件     
        output.write(getMethod.getResponseBody());     
        output.close();     
        JFrame frame= new JFrame();
		frame.setVisible(false);
		frame.setBounds(100, 100, 100, 100);
		frame.setLayout(new FlowLayout());
		ImageIcon icon  = new ImageIcon(excelPath);
		frame.add(new JLabel(icon));
		frame.setVisible(true);
		/**
		* 在控制台输入验证码
		*/
		System.out.println("-------->>>>>请输入你看到的验证码:");
		Scanner scr = new Scanner(System.in);
		String ValidCode = scr.nextLine();
        return ValidCode;   
    }   

	public static String GetRegex(String str, String rexString){
		// 生成 Pattern 对象并且编译一个简单的正则表达式"Kelvin"
        Pattern p = Pattern.compile(rexString); 
        // 用 Pattern 类的 matcher() 方法生成一个 Matcher 对象
        Matcher m = p.matcher(str);
        String result = "";
        if(m.find()){
        	result = m.group();
        }
        return result;
     }
	public static void main(String[] args) {
		try {
			System.out.println("------------>>>>>请输入关键字:");
			Scanner scr = new Scanner(System.in);
			String key = scr.nextLine();
			query("",URLEncoder.encode(key, "UTF-8"));
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
	

	

分享到:
评论

相关推荐

    httpclient绕过验证码直接抓取

    "HttpClient绕过验证码直接抓取" HttpClient是一种常用的网络请求库,常用于网络爬虫、自动化测试、数据爬取等领域。今天,我们将讨论如何使用HttpClient绕过验证码直接抓取网站数据。 绕过验证码的原理 验证码是...

    httpClient连接https 获得验证码图片示例

    httpClient连接https 获得验证码图片示例 需要证书才能连接的那种 /* 本文所用开发工具 jak1.5.0_06 eclipse:ObjectWeb Lomboz lib: commons-codec-1.4.jar commons-logging-1.1.jar httpclient-4.0.3.jar ...

    利用httpclient发送短信验证码-中国网建平台

    利用-中国网建平台-发送短息验证码,或者短信信息,大多数用户android,ios应用手机注册时发送短信验证码,利用httpclient发送,其他短信平台用法大同小异.详细介绍可以观看各个短信平台的开发文档,写得都很详细!

    httpclient绕过登陆验证码直接抓取内部数据

    使用 HttpClient 绕过登录验证码可以实现免登录访问,但是需要注意 Cookie 的路径、域名和过期时间等信息,并选择合适的 Cookie 策略。同时,我们也需要注意.blackhat 的攻击,以保护用户的登录信息。

    用HttpClient类实现查询申通快递的功能

    ### 使用HttpClient类实现查询申通快递功能的知识点详解 #### 一、背景介绍 随着电子商务的迅速发展,物流服务已成为日常生活中不可或缺的一部分。对于企业和个人用户来说,能够实时查询包裹的状态变得尤为重要。...

    HttpClient实现文件下载

    ### HttpClient 实现文件下载 #### 一、简介与原理 在Java开发中,经常会遇到需要通过HTTP协议来获取网络资源的需求,例如从Web服务器下载文件。Apache HttpClient 是一个用于发送HTTP请求的Java类库,它提供了...

    HttpClient实现远程下载

    通过HttpClient实现远程下载,本例子通过java代码实现

    java短信验证码实现模拟

    在Java中使用HttpClient模拟POST请求或者GET请求,使用的是信易通的短信平台接口,一般的情况下都是POST请求(post请求安全,可靠,信息不会在地址栏显示出来),然后(看短信平台要求,),调用短信平台提供的接口...

    HttpClient4.5 实现https忽略SSL证书验证

    使用HttpClient4.5实现https请求忽略SSL证书验证工具类

    httpclient实现webservice客户端

    本篇文章将详细介绍如何使用HttpClient实现WebService客户端。 首先,我们需要了解WebService的基本概念。WebService是一种基于标准的、平台无关的、可以跨网络传输数据的方式。它使用SOAP(Simple Object Access ...

    Android使用HttpClient实现上传下载功能并监控进度

    本教程将详细介绍如何利用HttpClient实现文件的上传与下载,并且实时监控进度,以便在UI上显示进度条。 首先,理解HttpClient的基本用法是至关重要的。HttpClient是Apache的一个组件,它提供了丰富的API来构建网络...

    HttpClient实现POST GET和文件下载

    本文将深入探讨HttpClient如何实现这些功能。 ### POST请求 POST请求通常用于向服务器提交数据,如表单数据或者JSON对象。使用HttpClient发送POST请求的基本步骤如下: 1. **创建HttpClient对象**:首先,我们需要...

    使用HttpClient实现文件的上传所需lib

    从提供的文件名称列表"HttpClient实现文件的上传-lib"来看,这可能包含了所需的jar文件或者对应的Maven/Gradle依赖配置。 7. **最佳实践**:为了保持代码的整洁和可维护性,通常建议使用try-with-resources语句来...

    java实现HttpClient异步请求资源的方法

    本篇文章将详细介绍如何使用Java的HttpClient实现异步请求资源。 首先,让我们了解什么是异步请求。在同步请求中,调用一个API或发送一个HTTP请求后,程序会等待响应返回,然后继续执行后续代码。而异步请求则不同...

    httpclient实现跨项目数据交互

    `Httpclient` 是一个强大的工具,可以实现跨项目间的数据通信。本文将深入探讨如何使用 `Httpclient` 进行HTTP请求,实现不同项目之间的数据交换。 `Httpclient` 是Apache HttpClient库,它为Java开发者提供了全面...

    httpclient 查询股票信息

    在这个场景中,我们看到一个与查询股票信息相关的项目,利用了HTTPClient来获取数据。让我们深入探讨一下这个话题。 首先,`HTTPClient`是Apache HttpClient项目的一部分,提供了一个强大的API来实现HTTP协议的各种...

    实现短信验证码需要用到的jar包.rar

    在这个“实现短信验证码需要用到的jar包.rar”压缩包中,包含了三个重要的Java库:`commons-codec-1.4.jar`、`commons-httpclient-3.1.jar`和`commons-logging-1.1.1.jar`。这些库是实现短信验证码发送和接收的关键...

    httpclient所有jar包以及实现类

    通过熟练掌握HttpClient的使用,后台程序员可以更高效地实现与远程服务器的通信,特别是处理JSON数据的场景。 总的来说,"HTTPclient.jar"包含了实现HTTP请求和响应处理所需的所有类和接口。结合JSON解析库,后台...

Global site tag (gtag.js) - Google Analytics