- 浏览: 472960 次
- 性别:
- 来自: 北京
-
文章分类
最新评论
-
白天看黑夜:
PDMReader实现pdm建模快速导出word,html文件 ...
powerDesigner PDM格式导出常见问题 -
小黄牛:
分布一个Dubbo分布式架构项目实战参考内容:http://w ...
dubbo学习 -
Emotion_小寳:
无意中看见了,给悦神赞一个!
openResty安装 -
bewithme:
zy116494718 写道bewithme 写道Ffmpeg ...
ffmpeg实例 -
zy116494718:
bewithme 写道Ffmpeg 这个类哪里来的?楼主你偷来 ...
ffmpeg实例
用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工具。
发表评论
-
Future详解
2021-08-10 11:37 308一般使用线程池执行任务都是调用的execute方法,这个方法 ... -
CountDownLanch原理
2021-08-09 20:00 252文章转载自:https://segmentfault.com/ ... -
Java基础之Java8中Map的compute的使用
2020-10-10 18:57 1294假如我们现在有一需求,需要统计一个字符串中各个字母出现的频 ... -
java泛型实例
2019-06-15 21:09 809首先定义一个接口 ... -
Java 7 新的 try-with-resources 语句,自动资源释放
2019-04-25 14:41 447转载请注明出处:https ... -
java字节流与字符流的区别
2016-10-26 18:34 1259字节流与字符流 先来看一下流的概念: 在程序中所有的数 ... -
视频库之断点下载
2015-08-10 16:33 555断点续传主要是使用http协议中range的属性来取得资源的 ... -
视频库之断点续传
2015-07-30 11:37 1179近日公司有个项目要做一个视频库,故开始阶段 ... -
视频库之断点续传
2015-07-29 18:07 6近日公司有个项目要做一个视频库,故开始阶段性 ... -
数据库读写分离(java部分配置)
2015-06-15 15:26 2550假设有两台数据库服务器:192.168.0.1(写) 和1 ... -
图片压缩
2014-10-21 14:53 864下面方法可以做到压缩图片不失真: public c ... -
java图片合成
2013-11-05 16:52 2916下面这个例子介绍如何把3张图片合在一张图片里,用的是jav ... -
文件上传与下载
2013-01-16 10:03 1448文件下载: jsp: <input type=& ... -
线程池系列三:结合线程池实现Socket
2012-11-14 17:26 1430Java5增加了新的类库并发集java.util.concur ... -
线程池系列二:ThreadPoolExecutor讲解
2012-11-14 11:42 1533一、简介 1)线程池 ... -
线程池系列一:线程池作用及Executors方法讲解
2012-10-24 11:41 37577线程池的作用: 线程池作用就是限制系统中执行线 ... -
ArrayList 和 CopyOnWriteArrayList 线程安全测试
2012-10-19 17:48 1897ArrayList 是 非线程安全的, CopyOnWrite ... -
后台json传递
2012-06-21 15:38 4058json除了可以用于前台传递,还可用于后台之间传递。它可以传递 ... -
解决中文乱码问题
2012-05-18 14:42 2878首先可以试下在TOMCAT中 ... -
cookie的读取与写入
2012-05-11 11:42 930java对cookie的操作比较简单,主要介绍下建立cooki ...
相关推荐
这是httpclient应用所有jar,用户抓取请求内容,本人平时用的就是这个,欢迎下载!
httpclient应用,支持get/post请求,支持https请求。
解上傳亂碼 博文链接:https://jeans.iteye.com/blog/201394
HttpClient组件允许应用程序直接通过HTTP协议访问Web服务器上的资源,这对于RIA(Rich Internet Applications)和Web服务客户端的开发尤其有用。 HttpClient组件的主要特点和功能包括: 1. 实现了HTTP 1.0和1.1的...
学习C#必经之路,入门级知识总结,笔记本知识概况,走一步再走一步
java httpClient应用,包含了设置代理等功能。
HttpClient之Https应用实例~ 包含: HttpClient 使用代理访问Https HttpClient 信任所有主机-对于任何证书都不做检查 HttpClient 允许所有证书的校验(包括过期证书)
《深入解析httpclient.jar及其与code.jar的关联》 在Java开发中,HTTP通信是不可或缺的一部分,而Apache HttpClient库正是Java...理解和熟练掌握HttpClient库,将有助于提升Java应用在网络通信方面的效率和稳定性。
应用HttpClient时添加的代码。应用HttpClient时添加的代码。应用HttpClient时添加的代码。应用HttpClient时添加的代码。应用HttpClient时添加的代码。应用HttpClient时添加的代码。应用HttpClient时添加的代码。
在IT行业中,网络通信是应用程序之间交互的重要方式,而HTTPClient是Java开发中常用的一款库,用于执行HTTP请求。这个“HTTPClient的一个封装”显然指的是对Apache HttpClient库进行了定制化处理,以适应特定项目...
本文将深入探讨HttpClient 4.1.2的核心特性、用法以及在实际开发中的应用。 一、HttpClient 4.1.2概述 HttpClient 4.1.2是HttpClient库的稳定版本,它主要关注性能提升、错误修复和新特性的引入。该版本支持...
ApacheCommons-HTTPClient组件的应用.doc
HttpClient 4.3 是 Apache 开源组织提供的一个用于构建 HTTP 客户端应用程序的强大库,主要专注于 HTTP 协议的实现。它建立在 HttpCore 库之上,支持传统的阻塞 I/O 模型,适用于各种需要高效、可控的 HTTP 交互的...