博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JAVA WebSpider
阅读量:2382 次
发布时间:2019-05-10

本文共 3175 字,大约阅读时间需要 10 分钟。

站在巨人的肩膀上


虚拟表单提交

HtmlUnit

简介

HtmlUnit本来是一款自动化测试的工具,它采用了HttpClient和java自带的网络api结合来实现,它与HttpClient的不同之处在于,它比HttpClient更“人性化”。 在写HtmlUnit代码的时候,仿佛感觉到的就是在操作浏览器而非写代码,得到页面(getPage)– 寻找到文本框(getElementByID || getElementByName || getElementByXPath 等等)– 输入文字(type,setValue,setText等等)– 其他一些类似操作 – 找到提交按钮 – 提交 – 得到新的Page,这样就非常像一个人在后台帮你操作浏览器一样,而你要做的就是告诉他如何操作以及需要填入哪些值。

HttpClient

简介

HttpClient 是 Apache Jakarta Common 下的子项目,可以用来提供高效的、最新的、功能丰富的支持 HTTP 协议的客户端编程工具包,并且它支持 HTTP 协议最新的版本和建议。

简单实现

NameValuePair nameValuePair1 = new BasicNameValuePair("name", "yang");NameValuePair nameValuePair2 = new BasicNameValuePair("pwd","123123");List nameValuePairs = new ArrayList();nameValuePairs.add(nameValuePair1);nameValuePairs.add(nameValuePair2);String validateURL = "http://10.0.2.2:8080/testhttp1/TestServlet";try {        HttpParams httpParams = new BasicHttpParams();        HttpConnectionParams.setConnectionTimeout(httpParams,5000); //设置连接超时为5秒        HttpClient client = new DefaultHttpClient(httpParams); // 生成一个http客户端发送请求对象        HttpPost httpPost = new HttpPost(urlString); //设定请求方式          if (nameValuePairs!=null && nameValuePairs.size()!=0) {              //把键值对进行编码操作并放入HttpEntity对象中              httpPost.setEntity(new UrlEncodedFormEntity(nameValuePairs,HTTP.UTF_8));           }        HttpResponse httpResponse = client.execute(httpPost); // 发送请求并等待响应          // 判断网络连接是否成功          if (httpResponse.getStatusLine().getStatusCode() != 200) {             System.out.println("网络错误异常!!!!");             return false;           }        HttpEntity entity = httpResponse.getEntity(); // 获取响应里面的内容        inputStream = entity.getContent();  // 得到服务气端发回的响应的内容(都在一个流里面)        // 得到服务气端发回的响应的内容(都在一个字符串里面)        // String strResult = EntityUtils.toString(entity);       } catch (Exception e) {   System.out.println("这是异常!");  }

注意问题

1.一般重定向都是GET的方式提交(response.sendRedirect(url?mesage=xxxx);)。也可以post的方式提交,实现如下

HttpClient http=new HttpClient (response);http.setParameter("message","xxxx");http.sendByPost(url);

HttpURLConnection

部分实现代码

HttpURLConnection connection = (HttpURLConnection)url.openConnection();initConnct(connection, cookie);int responseCode = connection.getResponseCode();int contentLength = connection.getContentLength();if (responseCode != HttpURLConnection.HTTP_OK|| contentLength<=0) return(null);InputStream in = connection.getInputStream();

注意问题

1.当设置了setDoOutput(true)时,必须设置为POST方式提交,成对出现;

2.setInstanceFollowRedirects(false),禁止本次链接重定向;

3.setFollowRedirects(),设置所有的HTTP链接自动处理重定向

4.setRequestProperty(“User-Agent”, ” Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.101 Safari/537.36”),有的服务器禁止应用程序访问,设置后可以解决

5.setRequestProperty(“Content-Type”,“application/x-www-form-urlencoded” / “multipart/form-data”);

两种格式有区别,后者能够实现文件上传,前者不能

6.所有setRequestProperty函数必须在connect()前,outputstream的设定必须在getInputStream()前。

7.connect()函数可以不调用,getInputStream()函数会默认调用该函数。

8.HTTPURLConnection是按照HTTP协议的直接提交数据到服务端,不会做前台验证。


爬虫实现

简介

网络爬虫通过遍历互联网络,把网络中的相关网页全部抓取过来。图的遍历方式分为宽度遍历和深度遍历,但是深度遍历可能会在深度上过深的遍历或者陷入黑洞。所以,大多数爬虫采用宽度优先遍历。另一方面,爬虫在按照宽度优先遍历的方式时候,会给待遍历的网页赋予一定优先级,这种叫做带偏好的遍历。

示例代码

示例代码包含爬虫示例WebSpider(包含Ant运行版本);htmlUnit示例,JS虚拟表单提交示例,HttpURLConnection示例。

转载地址:http://ugkab.baihongyu.com/

你可能感兴趣的文章
BPR-FDD 模型图原始档
查看>>
mail
查看>>
团队管理的五项职能--学习笔记加个人理解总结
查看>>
自勉三句话--关于职业生涯规划
查看>>
grace
查看>>
test
查看>>
用友实施方法论
查看>>
系统功能清单
查看>>
ERP&MES&SCM 三兄弟发展史
查看>>
Grace的简历-v3.1
查看>>
file2
查看>>
file456
查看>>
flow
查看>>
需求定位模型
查看>>
BOM
查看>>
Eclipse Debug调试详解
查看>>
Type Dynamic Web Module 4.0 requires Java 1.8 or newer----彻底杀死Bug
查看>>
前端接口请求测试
查看>>
error RS102 too stale to catch up
查看>>
Nagios监控MySQL报错:NRPE: Unable to read output的详细解决过程
查看>>