`
zy116494718
  • 浏览: 472960 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

HttpClient应用

    博客分类:
  • Java
 
阅读更多

用HttpClient爬网站时有时会遇到一种现象,就是自己写个JSP模拟表单提交可以成功,但是用HttpClient就无法成功。

原因有可能是Header或者Cookies没有设置,因为如果用游览器访问的话,这些参数都可以通过游览器而取到,不需要自己手动设置,而HttpClient则无法做到。所以我们需要对HttpClient进行设置,完整的代码如下:

 

 

 

 

public static String  HttpClientCIB()
	{
	      //添加header信息

              List <Header> headers = new ArrayList <Header>();  
	      headers.add(new Header("Referer", "http://wap.sududa.com/default.aspx"));  
	      headers.add(new Header("User-Agent", "http://wap.sududa.com/default.aspx"));  
	      headers.add(new Header("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8"));  
	      headers.add(new Header("User-Agent", "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1)"));  
	      headers.add(new Header("Accept-Language", "zh-cn,zh;q=0.5"));  
	      headers.add(new Header("Host", "wap.sududa.com"));  
	      headers.add(new Header("Accept-Charset", "GB2312,utf-8;q=0.7,*;q=0.7"));  


     	HttpClient httpclient = new HttpClient();
        httpclient.getHostConfiguration().getParams().setParameter("http.default-headers", headers);    
		httpclient.getHostConfiguration().setProxy( "202.84.17.41",8080);
		httpclient.getHttpConnectionManager().getParams().setConnectionTimeout(50);
		
		String result="";
	  
		  PostMethod httppost = new PostMethod("http://wap.sududa.com/wap/default.aspx"); 
          httppost.getParams().setContentCharset("GB2312");
		  httppost.setRequestHeader("Connection", "close");

		  
               //添加两个Cookie信息
		  httpclient.getParams().setCookiePolicy(CookiePolicy.RFC_2109);//RFC_2109是支持较普遍的一个,还有其他cookie协议  
		  HttpState initialState = new HttpState();  
		  
		  Cookie SUDUDA_COM_WapBalance = new Cookie();  
		  SUDUDA_COM_WapBalance.setDomain("wap.sududa.com");  
		  SUDUDA_COM_WapBalance.setPath("/");  
		  SUDUDA_COM_WapBalance.setName("SUDUDA_COM_WapBalance");  
		  SUDUDA_COM_WapBalance.setValue("0.000");  
		  
		  Cookie SUDUDA_COM_WapKey = new Cookie();  
		  SUDUDA_COM_WapKey.setDomain("wap.sududa.com");  
		  SUDUDA_COM_WapKey.setPath("/");  
		  SUDUDA_COM_WapKey.setName("SUDUDA_COM_WapKey");  
		  SUDUDA_COM_WapKey.setValue("56643CAF26F5A7751F1097F4B3D01AC4");  
		  
		
		  
		  
		  initialState.addCookie(SUDUDA_COM_WapBalance);  
		  initialState.addCookie(SUDUDA_COM_WapKey);  

		  
		  
		  
		  httpclient.setState(initialState);  

		  
		  NameValuePair[] data = { 
				new NameValuePair("__VIEWSTATE", "/wEPDwUKMjAzOTY2ODc0NmRkkLuRhKYz6SYsEOIBQM8bHuiWt2k="),
				new NameValuePair(".logontest", ""),
				new NameValuePair("Name", "readls@163.com"),
				new NameValuePair("Pass","changwei"),
		
		  };
        		httppost.setRequestBody(data);
                InputStream is = null;
        try { 
		    httpclient.executeMethod(httppost);

          BufferedReader bf = new BufferedReader(new InputStreamReader(httppost.getResponseBodyAsStream()));
	//	  result=httppost.getResponseBodyAsStream();
		  

          String line;

          StringBuffer paramter= new StringBuffer();
          while ((line = bf.readLine()) != null){
          //    System.out.println(line);
         
              paramter=paramter.append(line);
          }

          bf.close();
          
          result=paramter.toString();
		  result=result.replaceAll("\n","");
          result=result.replaceAll("\r","");
          result=result.replaceAll("\t","");         
    //      System.out.println("||"+result+"||");

		  }catch( Exception e){
			  e.printStackTrace();
		  } 
		  finally {
		    httppost.releaseConnection();
		  }
		  return result;
	}

 

 

    有一种特殊情况,就是传递的参数是不固定的,也就是说其中一个参数是要给对方传递一个数组,例如groupIds这个参数是一个数组,给对方传过去时是.do?groupIds=1&&groupIds=2这种。所以不能用传统的直接赋值,NameValuePair[] data = { new NameValuePair("name",1),new NameValuePair("age",20)};这种,只能初始化数组时就给定长度。

例:

 

			NameValuePair[] data = new NameValuePair[groupId.size()+7];  

			


		 			 String categoryName= globalContext.getArticleSysCategoryManager().getCategoryNameById(article.getSystemCategoryId());
					 data[0] = new NameValuePair("operName", article.getUserName());
					 data[1] = new NameValuePair("title", article.getTitle());
					 data[2] = new NameValuePair("tag", article.getTagWords());
					 data[3] = new NameValuePair("srcContentId",String.valueOf(article.getId()));
					 data[4] = new NameValuePair("itemType", "4");
					 data[5] = new NameValuePair("category", categoryName);
					 data[6] = new NameValuePair("srcUrl", articleURL);
					 
					
					for(int j=0;j<groupId.size();j++){
					
				
						data[j+7] = new NameValuePair("groupIds", String.valueOf(groupId.get(j)));
					}
				
					
				
			httppost.setRequestBody(data);
 


想获得该网页的Header和Cookie信息,可以通过HttpWatch工具。

分享到:
评论

相关推荐

    apache-httpclient应用所有jar

    这是httpclient应用所有jar,用户抓取请求内容,本人平时用的就是这个,欢迎下载!

    httpclient应用

    httpclient应用,支持get/post请求,支持https请求。

    HttpClient应用实例2

    解上傳亂碼 博文链接:https://jeans.iteye.com/blog/201394

    HTTPClient组件的应用

    HttpClient组件允许应用程序直接通过HTTP协议访问Web服务器上的资源,这对于RIA(Rich Internet Applications)和Web服务客户端的开发尤其有用。 HttpClient组件的主要特点和功能包括: 1. 实现了HTTP 1.0和1.1的...

    C#HTTPclient 实例应用

    学习C#必经之路,入门级知识总结,笔记本知识概况,走一步再走一步

    httpClient

    java httpClient应用,包含了设置代理等功能。

    HttpClient之Https应用实例

    HttpClient之Https应用实例~ 包含: HttpClient 使用代理访问Https HttpClient 信任所有主机-对于任何证书都不做检查 HttpClient 允许所有证书的校验(包括过期证书)

    httpclient.jar包下载

    《深入解析httpclient.jar及其与code.jar的关联》 在Java开发中,HTTP通信是不可或缺的一部分,而Apache HttpClient库正是Java...理解和熟练掌握HttpClient库,将有助于提升Java应用在网络通信方面的效率和稳定性。

    应用HttpClient时添加的代码。

    应用HttpClient时添加的代码。应用HttpClient时添加的代码。应用HttpClient时添加的代码。应用HttpClient时添加的代码。应用HttpClient时添加的代码。应用HttpClient时添加的代码。应用HttpClient时添加的代码。

    HTTPClient 的一个封装

    在IT行业中,网络通信是应用程序之间交互的重要方式,而HTTPClient是Java开发中常用的一款库,用于执行HTTP请求。这个“HTTPClient的一个封装”显然指的是对Apache HttpClient库进行了定制化处理,以适应特定项目...

    httpclient4.1.2 jar包

    本文将深入探讨HttpClient 4.1.2的核心特性、用法以及在实际开发中的应用。 一、HttpClient 4.1.2概述 HttpClient 4.1.2是HttpClient库的稳定版本,它主要关注性能提升、错误修复和新特性的引入。该版本支持...

    ApacheCommons-HTTPClient组件的应用.doc

    ApacheCommons-HTTPClient组件的应用.doc

    httpclient4.3中文教程

    HttpClient 4.3 是 Apache 开源组织提供的一个用于构建 HTTP 客户端应用程序的强大库,主要专注于 HTTP 协议的实现。它建立在 HttpCore 库之上,支持传统的阻塞 I/O 模型,适用于各种需要高效、可控的 HTTP 交互的...

Global site tag (gtag.js) - Google Analytics