使用sina微博API时由于我这里上网是通过代理的,所以一直提示如下问题:
Caused by: java.net.SocketTimeoutException: connect timed out
我知道肯定是代理的问题,但刚接触sina API,实在无从下手,最后看到一篇博文,基本理清了问题症结。
sina API for Java 使用了httpclient连接,预留了设置代理的代码,但是他设置代理的代码调用了这句
client.getHostConfiguration().setProxy(proxyHost, proxyPort);
而在org.apache.commons.httpclient.HostConfiguration中源代码为
public synchronized void setProxy(final String proxyHost, int proxyPort) {
this.proxyHost = new ProxyHost(proxyHost, proxyPort);
}
this.proxyHost = new ProxyHost(proxyHost, proxyPort);
}
在org.apache.commons.httpclient.ProxyHost中源代码为
public ProxyHost(final String hostname, int port) {
super(hostname, port, Protocol.getProtocol("http"));
}
super(hostname, port, Protocol.getProtocol("http"));
}
可以看出默认初始化为http协议,而在weibo4j.http.HttpClient
public HttpClient(int maxConPerHost, int conTimeOutMs, int soTimeOutMs, int maxSize)中有代码
Protocol myhttps = new Protocol("https", new MySSLSocketFactory(), 443);
Protocol.registerProtocol("https", myhttps);
Protocol.registerProtocol("https", myhttps);
表明这里设置了协议为https,所以我们要做的就是要么将上面这两句注释掉,默认使用http协议,要么在代理设置时设置协议为https。