最近在写一个课程作业的时候,要用到猫眼电影的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。
恳求路过大神帮帮忙~~
经过反复尝试,最后糊里糊涂地解决了:
在代码的第10行建立连接之后,需要用httpConn.setRequestProperty("xxxxxxx")给这个连接设置一个本地的Cookie,然后就能正常获取数据了。
聚集填下经常接包的可以合作,加Q群具体咨询458308769,在多的技术BAT也有限,但商业无限。
比较 headers 部分的差异
我在代码里面openConnection之后查看这个连接的headers,第一行是
HTTP/1.1 403 Forbidden,
请问这样是不是说明猫眼实际上没有开方这些数据的访问权限呀?
谢谢帮助
有可能是跨域问题
谢谢回复
可能需要猫眼开放权限给你。
我现在也开始怀疑可能是权限的问题,请问你这样推断的理由是什么啊?
谢谢回复
conn = (HttpURLConnection) url.openConnection();
conn.setRequestProperty("User-Agent", "Mozilla/4.0 (compatible; MSIE 5.0; Windows NT; DigExt)");
这是服务器单方面默认杜绝后台数据采集座的防护,加上这个就可以了
conn.setRequestProperty("accept", "*/*");
conn.setRequestProperty("connection", "Keep-Alive");
conn.setRequestProperty("user-agent",
"Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");
估计猫眼是为了防止盗链和爬虫吧