刚到新公司报道第一天,上级发给我一个链接,通过curl命令方式获取的数据格式应该是怎样的,然后吩咐我把这个接口通过java 把代码写出来。
其实做技术的都知道,curl说白了就是封装的httpClient模式,所以拿到手之后,满满信心,太简单了吧,结果研究了一天都没有什么结果,其实忽略了https需要证书才可以获取到接口数据,之前也没弄过这块,结果掉大了。
第二天继续研究,不得不说度娘是个好东西,最开始,一直用httpClient get 和post方式去调取,当然需要证书,结果一直报错PIXK错误,然后一直以为是证书合成不对,然后各种百度,答案都是证书要导入到jdk里面去等等之类的,还有什么绕过证书的,我也按照步骤做,结果始终报错,各种办法,各种问人,一直到昨天晚上,三天啊,仓了个天啊。。。无意中用HttpsURLConnection 去调取证书,然后请求get或者post,结果竟然成功了,当时泪流啊。。。
现在都没弄清楚httpClient去请求和HttpsURLConnection 一样的请求,怎么结果差别这么大。
今天分析了下这两者区别,在绝大部分情况下,Web站点的网页可能没这么简单,这些页面并不是通过一个简单的URL就可访问的,可能需要用户登录而且具有相应的权限才可访问该页面。在这种情况下,就需要涉及Session、Cookie的处理了,如果打算使用HttpURLConnection来处理这些细节,当然也是可能实现的,只是处理起来难度就大了;总的来说,HttpClient就是一个增强版的HttpURLConnection,HttpURLConnection可以做的事情HttpClient全部可以做;HttpURLConnection没有提供的有些功能,HttpClient也提供了,但它只是关注于如何发送请求、接收响应,以及管理HTTP连接,不会缓存服务器的响应,不能执行HTML页面中嵌入的JavaScript代码;也不会对页面内容进行任何解析、处理。
当然,用HttpsURLConnection 去请求,从服务器下载 (如何下载,度娘有很多资料的) 的证书还是要导入到客户端的jdk上的。