首页新闻找找看学习计划

Java访问一个url获得的返回结果和浏览器获得的返回结果不同

1
悬赏园豆:5 [已解决问题] 解决于 2016-05-28 01:32

最近在写一个课程作业的时候,要用到猫眼电影的API获取数据,碰到一个头疼的问题。

url为:http://m.maoyan.com/showtime/wrap.json?cinemaid=1111&movieid=248680

我直接在浏览器中访问这个url能得到对应的Json数据;

但是在Java代码中用这个url却得不到任何数据;

 

访问url的方法如下:

 1     public static String getURLContent(String urlStr) {             
 2         URL url = null;            
 3         //http连接
 4         HttpURLConnection httpConn = null;          
 5         //输入流
 6         BufferedReader in = null; 
 7         StringBuffer sb = new StringBuffer(); 
 8         try{
 9             url = new URL(urlStr);
10             httpConn = (HttpURLConnection)url.openConnection();
11             InputStreamReader inputStreamReader =  new InputStreamReader(httpConn.getInputStream(),"UTF-8");
12             in = new BufferedReader(inputStreamReader); 
13             String str = null;  
14             while((str = in.readLine()) != null) {  
15                 sb.append( str );
16             }
17         } catch (Exception ex) {
18             
19         } finally{  
20             try{           
21                 if(in!=null) {
22                     in.close();   
23                 }
24             }catch(IOException ex) {
25                 
26             }
27         }   
28         String result =sb.toString();   
29         //System.out.println(result);   
30         return result;
31     }

 

 

我观察这个url后发现直接访问http://m.maoyan.com/showtime/wrap.json这个path的时候,猫眼的服务器是不会返回Json数据的,所以觉得问题可能是出在这里,但是不知道有什么解决办法去控制这个url。

 

恳求路过大神帮帮忙~~

ReynoldCheung的主页 ReynoldCheung | 初学一级 | 园豆:199
提问于:2016-05-27 17:37
< >
分享
最佳答案
1

经过反复尝试,最后糊里糊涂地解决了:

在代码的第10行建立连接之后,需要用httpConn.setRequestProperty("xxxxxxx")给这个连接设置一个本地的Cookie,然后就能正常获取数据了。

ReynoldCheung | 初学一级 |园豆:199 | 2016-05-28 01:30

聚集填下经常接包的可以合作,加Q群具体咨询458308769,在多的技术BAT也有限,但商业无限。

软谷 | 园豆:200 (初学一级) | 2017-05-24 14:32
其他回答(6)
0

 

比较 headers 部分的差异

收获园豆:3
Launcher | 园豆:44980 (高人七级) | 2016-05-27 17:59

我在代码里面openConnection之后查看这个连接的headers,第一行是

HTTP/1.1 403 Forbidden,

请问这样是不是说明猫眼实际上没有开方这些数据的访问权限呀?

支持(0) 反对(0) ReynoldCheung | 园豆:199 (初学一级) | 2016-05-27 21:42

谢谢帮助

支持(0) 反对(0) ReynoldCheung | 园豆:199 (初学一级) | 2016-05-28 01:33
0

有可能是跨域问题

收获园豆:1
hahanonym | 园豆:1453 (小虾三级) | 2016-05-27 18:23

谢谢回复

支持(0) 反对(0) ReynoldCheung | 园豆:199 (初学一级) | 2016-05-28 01:33
0

可能需要猫眼开放权限给你。

收获园豆:1
龙烟 | 园豆:31 (初学一级) | 2016-05-27 20:59

我现在也开始怀疑可能是权限的问题,请问你这样推断的理由是什么啊?

支持(0) 反对(0) ReynoldCheung | 园豆:199 (初学一级) | 2016-05-27 21:38

谢谢回复

支持(0) 反对(0) ReynoldCheung | 园豆:199 (初学一级) | 2016-05-28 01:34
2

conn = (HttpURLConnection) url.openConnection();
conn.setRequestProperty("User-Agent", "Mozilla/4.0 (compatible; MSIE 5.0; Windows NT; DigExt)");

 

这是服务器单方面默认杜绝后台数据采集座的防护,加上这个就可以了

sunkejava | 园豆:158 (初学一级) | 2016-08-04 11:01
0

conn.setRequestProperty("accept", "*/*");
conn.setRequestProperty("connection", "Keep-Alive");
conn.setRequestProperty("user-agent",
"Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");

jgig11 | 园豆:338 (菜鸟二级) | 2016-08-15 09:04
0

估计猫眼是为了防止盗链和爬虫吧

rgqancy | 园豆:30 (初学一级) | 2017-06-23 22:33
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册