案例:我正在将我网站的资料搬到我在百度空间的博客哦:作为备份用。
http://hi.baidu.com/java2000_net
手里有好多的技术资料,不想一个一个的粘贴到那里,包括在CSDN的一些代码,想复制一份到那里,留个备份。决定使用Java程序直接向博客里发数据。
需要解决的几个问题
1 认证
2 发送数据
3 解决发送太频繁的问题
一 认证百度支持保存用户名和密码,也就是自动登录,所以其登录信息肯定保存在cookie里面。
如何获得cookie呢?我提供2个方法
1 你去你机器的IE的临时目录里查找cookie吧,比如
C:\Documents and Settings\Administrator\Local Settings\Temporary Internet Files
里面有许多的cookie文件,具体是哪个?你自己找吧,我就不多说了。
2 用Firefox + Firebug 你只要看一下网络链接数据的Header,就可以看到cookie部分的数据了,比如
我们编写的程序,就需要把这个同时送过去,这样对方的程序就会自动识别登录的用户信息了。
二 发送数据我们使用HttpURLConnection 的 POST方法进行数据的发送,注意其中关键的几个部分
- Host 这个一定要设置成提交的主机相同,因为对于虚拟主机,这个最关键了
- Referer 这个一般被用来防止盗链,所以一定要设置为一个属于他站点的链接,比如发贴的页面链接
- Cookie 这个是认证的关键,否则发贴后会让你登录的
- Content-Type 对于普通的POST提交,使用 application/x-www-form-urlencoded,如果是带附件的提交,则需要使用multipart/form-data; boundary=XXXXXXX, 其中的XXXXXX是数据的边缘分界标志
- Content-Length 提交的数据长度,字节数
数据没啥特殊的,只要符合表单的要求就可以了,比如百度博客的数据格式如下
ct=1&cm=1&spRefURL=http%3A%2F%2Fhi.baidu.com%2Fjava2000%25255Fnet%2Fcreat%2Fblog%2F&spBlogTitle={TITLE}&spBlogText={CONTENT}&spBlogCatName=%C4%AC%C8%CF%B7%D6%C0%E0&spIsCmtAllow=1&spBlogPower=0&spVcode=&spVerifyKey=&tj=+%B7%A2%B1%ED%CE%C4%D5%C2+
其中的{TITLE}应该替换为我们自己的主题,{CONTENT}替换为我们自己的内容。
下面是发送数据的代码-
- public static boolean post(String host, String charset, String postURL, String referer, String cookies, String message, String title, String content) {
- try {
- URL url = new URL(postURL);
- HttpURLConnection con = (HttpURLConnection) url.openConnection();
- con.setDoOutput(true);
- con.setRequestMethod("POST");
- con.addRequestProperty("Host", host);
- con.addRequestProperty("Referer", referer);
- con.addRequestProperty("Cookie", cookies);
- con.addRequestProperty("Content-Type", "application/x-www-form-urlencoded");
- message = message.replace("{TITLE}", URLEncoder.encode(title, charset));
- message = message.replace("{CONTENT}", URLEncoder.encode(content, charset));
- con.addRequestProperty("Content-Length", Integer.toString(message.getBytes(charset).length));
- OutputStream os = con.getOutputStream();
- os.write(message.getBytes(charset));
- os.flush();
- BufferedReader reader = new BufferedReader(new InputStreamReader(con.getInputStream(), charset));
- String line;
- while ((line = reader.readLine()) != null) {
-
- break;
- }
- os.close();
- reader.close();
- return true;
- } catch (Exception ex) {
- ex.printStackTrace();
- return false;
- }
- }
给大家提供一个参考的参数数据
- host=hi.baidu.com
- charset=GBK
- cookie=
- post=http://hi.baidu.com/java2000%5Fnet/creat/blog/
- action=http://hi.baidu.com/java2000%5Fnet/commit
- message=ct=1&cm=1&spRefURL=http%3A%2F%2Fhi.baidu.com%2Fjava2000%25255Fnet%2Fcreat%2Fblog%2F&spBlogTitle={TITLE}&spBlogText={CONTENT}&spBlogCatName=%C4%AC%C8%CF%B7%D6%C0%E0&spIsCmtAllow=1&spBlogPower=0&spVcode=&spVerifyKey=&tj=+%B7%A2%B1%ED%CE%C4%D5%C2+
其中的cookie我去掉了,哈哈。 post 就是填写博客的地址,action就是提交博客的地址,其它的大家自己看吧
发送的接口- package net.java2000.blogsender;
- public interface Sender {
- public boolean send(String title, String message);
- }
我们给百度博客的实现类- package net.java2000.blogsender.baidu;
- import java.io.IOException;
- import java.util.Properties;
- import net.java2000.blogsender.Sender;
- import net.java2000.blogsender.util.PostUtil;
- public class BaiduSender implements Sender {
- private String host;
- private String charset;
- private String post;
- private String action;
- private String cookie;
- private String message;
- public boolean send(String title, String content) {
- content = content.replace("\r\n", "<br/>");
- content = content.replace("\n", "<br/>");
- return PostUtil.post(host, charset, action, post, cookie, message, title, content);
- }
- public BaiduSender() {
- Properties p = new Properties();
- try {
- p.load(BaiduSender.class.getResourceAsStream("baidu.properties"));
- host = p.getProperty("host");
- charset = p.getProperty("charset");
- post = p.getProperty("post");
- action = p.getProperty("action");
- cookie = p.getProperty("cookie");
- message = p.getProperty("message");
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
- }
三 解决发送太频繁的问题 我测试,百度的文章最快需要1分钟才能发一个,否则会因为发送太快而让你输入验证码,那个我可破解不了。
所以我们的程序应该发送一个之后,休眠1分钟再发另外一个。
小结:
用程序做类似的东西基本都差不多,都是模拟浏览器进行数据的提交。
JavaEye的博客发送程序也快弄好了,整理完毕后也发上来和大家分享。
欢迎访问
Java世纪网 http://www.java2000.net
<script type="text/javascript">
</script> <script src="http://pagead2.googlesyndication.com/pagead/show_ads.js" type="text/javascript">
</script>
分享到:
相关推荐
在Java程序设计中,定时器常常用于实现周期性的任务,比如定时备份数据、定时检查系统状态或者定时发送通知等。本篇文章将深入探讨Java定时器的使用方法和关键概念。 ### 1. Java定时器类介绍 Java定时器类`Timer`...
动态IP可以防止因频繁请求被网站封禁,而验证码识别则允许程序自动解密并输入验证码,提高自动化程度。 最后,数据持久化也是自动抢票程序需要考虑的问题。例如,用户配置信息、历史购票记录等数据,可能通过Java的...
Java开发的自动取款机(ATM)程序是学习Java编程和面向对象设计的一个经典案例。这个程序模拟了实际ATM机的各种功能,如存款、取款、查询余额、转账等,是Java初学者理解类、对象、接口、异常处理以及GUI设计的重要...
《使用JProfiler 6.2 监控本地Java程序运行》 在软件开发过程中,对Java应用程序进行性能分析和调优是一项重要的任务。JProfiler是一款强大的Java性能分析工具,可以帮助开发者深入理解应用程序的运行情况,定位...
1. **自动查找JRE**:工具会自动检测系统中的Java运行时环境,使得即使在没有预设环境变量的情况下也能正常运行Java程序。 2. **智能管理类路径**:用户可以通过配置文件或默认设置告知startJava需要加载的类路径,...
这个名为“编译和运行Java程序的小工具”就是为了简化这一过程而设计的。下面将详细解释这款小工具的工作原理以及如何利用它来提升Java开发效率。 首先,Java程序的执行通常需要经过两个主要步骤:编译和运行。编译...
2. **技术挑战**:尝试使用面向对象的方法重新设计自动售货机程序,比如为每种商品定义一个类,以提高代码的可读性和可维护性。 3. **用户友好性**:增强用户界面的设计,如添加图形界面或语音提示等功能,以提高...
3. **数组与集合框架**:Java提供了强大的数组和集合(如ArrayList、LinkedList、HashSet、HashMap等)来存储和操作数据,学习如何使用它们对提高程序效率至关重要。 4. **函数与方法**:学习如何定义和调用函数,...
《jhost免费Java空间自动续期程序解析及应用》 在IT行业中,自动化管理是提升效率的关键,尤其是在服务器和Web服务领域。"jhost免费Java空间自动续期程序"正是一款针对这一需求而设计的工具,它允许用户通过编写源...
Java是一种广泛使用的面向对象的编程语言,其特点包括强大的内存管理、丰富的类库以及严格的类型检查。本篇文章将深入探讨Java编程中的一些基础概念和逻辑题目的解析。 1. 计算机内存中的存储体的基本单位是位(bit...
Java程序由类(class)组成,每个类包含方法(method)。猜数字游戏通常会有一个主类(Main class),比如`GuessNumber`,其中包含`main`方法作为程序入口。程序中的变量用于存储数据,如生成的随机数和用户的猜测...
本文将详细讲解如何使用Java实现邮件自动发送,并基于提供的两个源码文件`mailFor163`和`mailForSina`进行解析。 首先,Java Mail API是Java发送邮件的核心库,它提供了丰富的接口和类来处理邮件协议,如SMTP(简单...
Java非对称加密源程序代码实例,本例中使用RSA加密技术,定义加密算法可用 DES,DESede,Blowfish等。 设定字符串为“张三,你好,我是李四” 产生张三的密钥对(keyPairZhang) 张三生成公钥(publicKeyZhang...
Java自动授权是一个重要的技术主题,尤其对于那些希望在应用程序中避免频繁出现联网授权提示的开发者而言。JBed,虽然在标题中提及,但没有提供足够的背景信息,可能是指一个特定的Java开发工具、库或者框架,它涉及...
《JAVA程序设计教程第六版》是由John Lewis和William Loftus两位专家共同编著的经典教材,旨在教授读者如何熟练掌握Java编程语言。这本书深入浅出地介绍了Java的核心概念、语法结构以及面向对象编程的基本原理,是...
ATM机程序是计算机科学中的一个经典案例,它模拟了自动取款机的实际操作流程,是学习面向对象编程、设计模式以及软件工程实践的良好实践。在这个Java实现的ATM机程序中,我们可以深入探讨以下几个关键知识点: 1. *...
在IT领域,尤其是在工业自动化和物联网(IoT)应用中,Java程序与PLC(可编程逻辑控制器)之间的通信是一个重要的技术主题。本资源包包含了关于这个主题的详细说明文档和相关的参考源代码,这对于开发者来说是极具价值的...
Java定时关机小程序是一种利用Java编程语言开发的实用工具,主要功能是设定一个特定时间后自动关闭计算机。这个小程序特别适合初学者学习,因为它涵盖了Java基础、GUI设计以及时间管理和系统操作等多方面的知识。 ...
《Java程序设计实例教程》是一本专注于通过实例教学来帮助读者深入理解Java编程语言的书籍。作者毕广吉精心设计了一系列的代码实例,旨在让学习者能够从实践中掌握Java的核心概念和技术。这本书不仅适合初学者作为...
Java自动序列化是一种在Java编程语言中用于...总结,Java自动序列化是一个强大的工具,但需要谨慎使用,以避免性能问题和安全风险。理解序列化的原理和实践,能帮助开发者更有效地利用这一特性,解决实际开发中的问题。