您的位置:首页 > 理论基础 > 计算机网络

设置http代理服务器使用xmlrpc进行远程连接

2007-04-15 14:23 399 查看
这两天都在研究如何转移blog的程序,现在终于有了关键性的突破。

因为blogconverter已经实现对msn spaces文章的获取,就想研究他好了,反正是开源的。于是下载eclipse,jdk,gwt,TortoiseSVN,tomact....进行java程序开发,工具就要下载一箩筐东西哎。

由于公司都是使用http代理服务器,只开了80端口,这个造成了非常大的问题。首先eclipse的svn插件不能正常地从资源库取出程序,只有装TortoiseSVN,为其设置代理服务器,然后就顺利从http://www.coollittlethings.com/svn/blogconverter签 出了blogconverter的源程序,然后使用eclipse导入进来。这个项目用到了google web tools进行ajax开发。找了半天也搞不懂怎么在tomcat里执行程序。于是只有把他当作application执行。com.w18.mblog 里面有个converter.java具有main函数,好像是gwt的程序入口点。运行程序后和http://www.coollittlethings.com/blogconverter/的效果差不多,要输入msn的帐号和机密字。本来以为这样就可以读出我blog上的内容,但没那么简单,前面说过公司里全部使用http代理上网,所以程序根本不能访问网络。

然后我就开始了漫长的寻找,这个程序使用msn提供的MetaWeblogApi接口进行文章的获取。MetaWeblogApi使用xmlrpc实现远程调用,以xml格式传输数据,他是非常轻量级的。http://www.xmlrpc.com/这个是官方网站,现在要解决的是在java的网络连接中设置代理服务器。可是网上关于如何实现的文章少的可怜,大概都是如下实现:

String proxyHost = "http://test.com"; //设置代理服务器名称

String proxyPort = "80" //代理服务器端口

System.setProperty("proxySet", "true");

System.setProperty("https.proxyHost", proxyHost);

System.setProperty("https.proxyPort", proxyPort);

Authenticator proxyAuthenticator = new HttpAuthenticateProxy();

Authenticator.setDefault(proxyAuthenticator);

HttpAuthenticateProxy

package com.w18.mblog.poster;

import java.net.Authenticator;

import java.net.PasswordAuthentication;

public class HttpAuthenticateProxy extends Authenticator

{

private static final String PROXY_USERNAME = "jecray"//代理用户名

private static final String PROXY_PASSWORD = "ycYC12!@" //代理密码

private String proxyUsername = PROXY_USERNAME;

private String proxyPassword = PROXY_PASSWORD;

public void setProxyUsername(String proxyUsername) {

this.proxyUsername = proxyUsername;

}

public void setProxyPassword(String proxyPassword) {

this.proxyPassword = proxyPassword;

}

protected PasswordAuthentication getPasswordAuthentication()

{

return new PasswordAuthentication(proxyUsername,

proxyPassword.toCharArray());

}

}

但是这样程序依然不能执行,不知道在java中如何设置全局的网络代理。这样用java实现变得不可能了。突然我想难道非要用java实现?如果用.net能实现的话何乐而不为呢。

接下来就思考着在.net上实现了。经过一次一次的google,找到了相关的信息。XML-RPC.NET是.net环境下的一个类库,他实现了XML-RPC服务器端和客户端.支持.net framework 1.1和2.0 而且是开源的.于是下载了该组件,从http://www.xml-rpc.net/可以得到他.解压缩后可以找到CookComputing.XmlRpc.dll,是for .net1.1的. 下面开始解决代理服务器的难题了,还好网上关于在.net中网络连接设置代理服务器的文章比较多.于是顺利解决了这个难题.就几行代码就搞定了

using System.Net;

Uri proxyURI = new Uri("http://jecjec.com:80");//代理服务器地址

System.Net.WebProxy proxyObject = new System.Net.WebProxy(proxyURI,false);

proxyObject.Credentials = new System.Net.NetworkCredential("jecray","pwd","domain"); //分别设置用户名,密码,域

GlobalProxySelection.Select = proxyObject;//设置程序访问网络时使用该代理

如果设置的话,会报以下错误:远程服务器返回错误: (407) 需要代理身份验证

在java中那么不容易完成的任务在.net中轻而易举啊.....

现在要实现通过msn spaces提供的MetaWeblogApi对spces进行读取了.所幸微软提供了很多帮助,msdn上很多篇介绍Windows Live Spaces MetaWeblog API 的文章.还有一个代码的示例 http://msdn2.microsoft.com/en-us/library/aa905664.aspx ,只要在项目中引用了CookComputing.XmlRpc.dll就可以直接编译,非常的方便.但由于我的特殊情况,需要加入设置代理服务器的那几行代码.

要 是程序正确执行还要注意 必须把你的blog设置Email发布功能,要设置一个机密字,程序中输入的用户名和密码不是你msn spaces的用户名密码,而是spaces的子域名和机密字. 这样程序就可以对blog的文章进行抓取.通过MetaWeblogApi还可以进行更多的操作,如发布文章,删除文章等等.

最后的任务就是把抓下来的文章生成xml.

条条道路通罗马 虽然不指望所有路都可以通,但总有路能通的.Created by jecray
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐