`
peteronline
  • 浏览: 262298 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

HttpClient模拟登陆并获取指定页面的内容

 
阅读更多

     前段时间工作上需要采集别的网站上的内容,然后再自己系统中展示数据。经过自己找资料最后选用了HttpClient。以下为自己摸索的方法 记录下来以便以后使用:

1、模拟登陆
private static final Logger logger = Logger.getLogger(IpManagerRobot.class);
	
private DefaultHttpClient httpClient = new DefaultHttpClient();

private boolean loging = false;

public boolean login() throws Exception{
		
                //需要登陆的地址,这里直接用登陆网站的form表单中的action属性。有的则可以直接使用...../login.jsp
		String loginForm = "http://124.238.214.79/platform/j_spring_security_check";
	
//		notifyMethod(loginForm);
	
		HttpPost httpPost = new HttpPost(loginForm);
		
                //设置请求头,httpwatch可以跟踪到
		httpPost.setHeader("User-Agent", "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0; WOW64; Trident/4.0; znwb6600; SLCC1; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30618)");
		httpPost.setHeader("Referer", "http://124.238.214.79/platform/");
		httpPost.setHeader("Content-Type", "application/x-www-form-urlencoded");
		
		//登陆form表单需要提交的参数
		List<NameValuePair> params = new ArrayList<NameValuePair>();	
		params.add(new BasicNameValuePair("j_username", "stc2012"));
		params.add(new BasicNameValuePair("j_password", "q1w2e3r4"));
		params.add(new BasicNameValuePair("domain","124.238.214.79"));
		params.add(new BasicNameValuePair("url","/platform/"));
		params.add(new BasicNameValuePair("expiry",""));
		
		//设置编码
		try {
			httpPost.setEntity(new UrlEncodedFormEntity(params,HTTP.UTF_8));
		} catch (UnsupportedEncodingException e) {
			e.printStackTrace();
		}
		
		HttpResponse res = 	postMethod(httpPost);
		
		if(res.getStatusLine().getStatusCode() == HttpStatus.SC_MOVED_PERMANENTLY || 
				res.getStatusLine().getStatusCode() == HttpStatus.SC_MOVED_TEMPORARILY ||
				res.getStatusLine().getStatusCode() == HttpStatus.SC_SEE_OTHER || 
				res.getStatusLine().getStatusCode() == HttpStatus.SC_TEMPORARY_REDIRECT){
			 
			logger.info("登陆成功");
			loging = true;
		}else{
			logger.info("登陆失败");
			loging = false;
		}

		return loging;
	}


public HttpResponse postMethod(HttpPost post) {
		HttpResponse resp = null;
		try {
			resp = httpClient.execute(post);
		} catch (ClientProtocolException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			post.abort();
		}
		return resp;
	}


2、登陆了以后就可以获取指定路径的页面内容了
public String get(String url) throws Exception{
		
//		String url = "http://124.238.214.79/platform/pages/getWssHistory.action?startDate="+startDate+"&endDate="+endDate+"&pageContext.currentpage=1";
		HttpGet get = new HttpGet(url);
		try {
			HttpResponse response = httpClient.execute(get);
			String responseString = "";
			if(response.getStatusLine().getStatusCode() == HttpStatus.SC_OK){
				HttpEntity entity = response.getEntity();
				
				BufferedReader br = new BufferedReader(new InputStreamReader(entity.getContent(), "UTF-8"));
				responseString = IOUtils.toString(br);
			}
			return responseString;
			
		} finally{
			get.abort();
		}
		
	}



另一种方法获取指定路径页面的内容
public String getText2(String url) throws Exception{
		
		HttpGet httpget = new HttpGet(url);
		try {
			
		    //创建HttpGet对象实例(get method实现)
//			String url = "http://124.238.214.79/platform/pages/getWssHistory.action?startDate="+startDate+"&endDate="+endDate+"&pageContext.currentpage=1";
		    
		    // 创建Response Handler,这里使用了其自带的BasicResponseHandler
		    ResponseHandler<String> responseHandler = new BasicResponseHandler();
		    String responseBody = httpClient.execute(httpget, responseHandler);
		    //编码转换,解决中文乱码问题
		    String responseString = new String(responseBody.getBytes("ISO-8859-1"),"UTF-8");
		    //返回网页的响应结果
		    return responseString;
		} finally {
		    //代码执行完毕后,释放HttpClient占用的资源
//			httpClient.getConnectionManager().shutdown();
			httpget.abort();
		}
	}



保存指定路径页面为.htm文件
public void saveCollectionPage() throws Exception{
		
		//这里也可以直接使用httpGet的绝对地址,当然如果不是具体地址不要忘记
		HttpGet httpGet = new HttpGet("http://124.238.214.79/platform/pages/getWssHistory.action?startDate=2013-04-07&endDate=2013-05-07&pageContext.currentpage=1");
		HttpResponse response = httpClient.execute(httpGet);
		if(HttpStatus.SC_OK == response.getStatusLine().getStatusCode()){
			//请求成功,取得请求内容
			HttpEntity entity = response.getEntity();
			if(entity != null){
				
				File storeFile = new File("d:/tt.htm");
				FileOutputStream output = new FileOutputStream(storeFile);
				InputStream input = entity.getContent();
				byte b[] = new byte[1024];
				int j = 0;
				while ((j = input.read(b)) != -1) {
					output.write(b, 0, j);
				}
				output.flush();
				output.close();
				
			}
			if(entity != null){
				entity.consumeContent();
			}
		}
	}




读取htm文件
public String readTextFile(String fileName,String encode){
		StringBuffer str = new StringBuffer();
		try {
			File file = new File(fileName);
			InputStreamReader read = new InputStreamReader(new FileInputStream(file),encode);
			BufferedReader in = new BufferedReader(read);
			String dataLine = "";
			while (null != (dataLine = in.readLine())) {
				str.append(dataLine);
			}
			in.close();
		} catch (Exception e) {
			logger.info("------------->文件读取失败!");
		}
		return str.toString();
	}

</div>
分享到:
评论

相关推荐

    Jsoup+httpclient 模拟登陆和抓取

    - 在Java程序中使用Jsoup和HttpClient来模拟登录一个网站并抓取页面内容。 - 案例中包含了登录、页面访问、内容抽取、页面修改和保存到本地等步骤,展示了完整的操作流程。 9. HTTP请求参数设置: - 设置HTTP...

    HttpClient模拟登陆

    在阅读博文《HttpClient模拟登陆》时,可以深入学习如何解决这些具体问题,并查看示例代码以获得更详细的实现细节。 标签“源码”意味着你需要关注底层的工作原理,而“工具”标签则暗示HttpClient作为一个实用工具...

    httpclient 模拟登陆代码和jar包

    模拟登录通常是开发自动化测试、爬虫或集成服务时必要的步骤,它允许程序模仿用户在网页上的登录行为。以下是一份使用`HttpClient`进行模拟登录的典型步骤和相关知识点: 1. **导入依赖**:首先,你需要在项目中...

    HttpClient以及获取页面内容应用

    1.6.1发送get请求获取网页内容 HttpClient client = new HttpClient(); //设置代理服务器地址和端口 //client.getHostConfiguration().setProxy("proxy_host_addr",proxy_port); //使用GET方法,如果服务器...

    java模拟淘宝登录源码

    // 解析登录页面,获取可能的验证码等信息 HttpPost httpPost = new HttpPost("https://login.taobao.com/member/login.jhtml"); List&lt;NameValuePair&gt; params = new ArrayList(); params.add(new ...

    httpclient测试登录并提交表单功能

    - 使用Apache HttpClient可以通过`PostMethod`类来构造表单数据,并发送POST请求到指定的URL。 4. **自定义HTTP方法**: - 为了满足特定的需求,有时需要对Apache HttpClient中的默认方法进行扩展或修改。 - 本...

    C#微信模拟登陆群发信息

    1. **请求登录页面**:使用HttpClient类向微信登录URL发起GET请求,获取登录页面的HTML内容,其中包含了用于后续请求的必要参数,如CSRF Token。 2. **填写登录信息**:根据登录页面获取的参数,构造包含用户名...

    C#模拟登陆微博分享。

    在本文中,我们将深入探讨如何使用C#编程语言来实现模拟登录微博并进行内容分享,特别是在实际项目中可能遇到的挑战和技术细节。 首先,我们需要理解C#的基础知识。C#是一种面向对象的、类型安全的编程语言,由微软...

    基于WebClient实现Http协议的Post与Get对网站进行模拟登陆和浏览实例

    最后,通过`DownloadString`方法获取网页内容,并更新或获取Cookie信息。 二、模拟POST请求 POST请求通常用于提交表单数据,例如登录网站时提交用户名和密码。在C#中,`WebClient.UploadString`方法可用于执行POST...

    java实现新浪微博抓取关注和粉丝的课程设计报告

    1. **HttpClient模拟登陆无法获取Cookie** - 解决方案:通过分析新浪的加密算法,并使用第三方工具如HTTPFox来捕获加密过程中的JS脚本,成功获取Cookie。 2. **通过HttpMethod请求网址之后返回内容出现乱码** - ...

    C# 简单爬虫C# 简单爬虫C# 简单爬虫

    这段代码创建了一个HttpClient实例,构造了POST数据,然后发送到指定URL,并获取响应内容。 接下来,我们介绍HtmlAgilityPack库。这是一个强大的.NET HTML解析器,它允许开发者以DOM(文档对象模型)方式处理HTML或...

    模拟登录拍拍

    - **建立连接**:创建HttpURLConnection对象,并连接到拍拍网的登录页面URL。 - **设置请求方法**:调用setRequestMethod("POST")方法指定为POST请求。 - **设置请求头**:模拟浏览器行为,添加必要的请求头,如...

    转 C#实现自动登录赶集网

    4. **发送POST请求**:使用`PostAsync`方法发送POST请求,并指定登录页面的URL。 ```csharp HttpResponseMessage response = await httpClient.PostAsync("https://www.ganji.com/login", content); ``` 5. **处理...

    C#登陆WebQQ

    3. **模拟登录**:使用C#的`HttpClient`类或者`WebClient`类来构造一个POST请求,模拟用户填写表单并提交。需要将之前解析到的字段作为POST数据传递,同时可能还需要添加一些额外的HTTP头,比如`User-Agent`和`...

    JAVA上百实例源码以及开源项目源代码

    Calendar万年历 1个目标文件 EJB 模拟银行ATM流程及操作源代码 6个目标文件,EJB来模拟银行ATM机的流程及操作:获取系统属性,初始化JNDI,取得Home对象的引用,创建EJB对象,并将当前的计数器初始化,调用每一个...

Global site tag (gtag.js) - Google Analytics