前言:
上星期写的追踪牛bite平台上比特币价格涨幅,因为他全部是异步加载直接抓取抓页面会没法发送异步请求,获得的是空数据,所以只能后推他们接口参数来访问获取数据,获取数据没问题,此时请求为 https ,没有考虑到重定向问题,今天来公司代码一跑,出现了
意思是: 没有任何可选的DNS名称匹配www.bullbtc.com,请求地址为:
此时请求协议为HTTPS,以为网站出问题了,然后去官网查看,没问题的,然后搜索资料说
网上只有这条跟我类似,尽管是Android的,于是改了改HTTP,浏览器能进去,后台代码呢?
返回的不是数据而是一个页面提示
出现了301,重定向,说明页面不再是这个了,我后台发的请求返回的是一个地址,所以问题;来了,到底咋回事?
从浏览器请求看看:
带有HTTPS,直接返回的是重定向后的数据
去掉s,http
301 出来了,先不说为什么http 与https 对待重定向的请求处理方式为什么不一样,至少已经找到怎么处理重定向问题了,就是我要发一个https 请求就可以解决了。
至于怎么发送https 请求代码比较多,看着也头疼,这里我也就不贴那么多了,网上有很多,需要用到了可以去搜一下,能用了建议还是好好理解一下。
SSLContext sc = SSLContext.getInstance(“SSL”);
sc.init(null, new TrustManager[]{newTrustAnyTrustManager()}, new java.security.SecureRandom());
URL console = new URL(url);
HttpsURL connect ion conn = (HttpsURLConnection) console.openConnection();
conn.setSSLSocketFactory(sc.getSocketFactory());
conn.setHostnameVerifier(newTrustAnyHostnameVerifier());
// conn.connect();
conn.setRequestProperty(“Content-Type”, “application/x-www-form-urlencoded”);
conn.setDoInput(true);
conn.setDoOutput(true);
PrintWriter writer = newPrintWriter(conn.getOutputStream());
//writer.print(httpBuildQuery(data));
writer.flush();
writer. close ();
String line;
BufferedReader bufferedReader;
StringBuilder sb = new StringBuilder();
InputStreamReader streamReader = null;
try {
streamReader = newInputStreamReader(conn.getInputStream(), “UTF-8”);
} catch (IOException e) {
streamReader = newInputStreamReader(conn.getErrorStream(), “UTF-8”);
} finally {
if (streamReader != null) {
bufferedReader = new BufferedReader(streamReader);
sb = new StringBuilder();
while ((line = bufferedReader.readLine()) != null) {
sb. append (line);
}
}
}
return sb. toString ();
总结:
出现重定向了解决方式就可以用HPPTS 来解决,不能说全部,至少目前是一种解决了这个问题,有其他方式了欢迎共享。
如需要源代码可以留言,我将源码分享一下