2013-05-30 169 views
5

我目前使用http://imdbapi.org的imdb api来获取有关影片的某些信息。当我使用API​​并尝试在java中打开这个url时,它给我一个403错误。该网址应该以JSON的形式返回数据。 这里是我到目前为止的代码(Java 7中):当我尝试打开一个URL时,为什么会出现403错误

import java.io.BufferedReader; 
import java.io.IOException; 
import java.io.InputStream; 
import java.io.InputStreamReader; 
import java.net.MalformedURLException; 
import java.net.URL; 

public class Test { 
    public static void main(String[] args) { 
     URL url =null; 
     try { 
      url = new URL("http://imdbapi.org/?q=batman"); 
     } catch (MalformedURLException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
     InputStream is =null; 
     try { 
      is = url.openConnection().getInputStream(); 
     } catch (IOException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
     BufferedReader reader = new BufferedReader(new InputStreamReader(is) ); 
     String line = null; 
     try { 
      while((line = reader.readLine()) != null) { 
       System.out.println(line); 
      } 
     } catch (IOException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
     try { 
      reader.close(); 
     } catch (IOException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
     System.out.println(line); 
    } 
} 
+1

这确实是奇怪的,因为这个网址为我工作。 – fge

回答

13

你应该设置User-Agent

System.setProperty("http.agent", "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1500.29 Safari/537.36"); 

URLConnection connection = url.openConnection(); 
connection.setRequestProperty("User-Agent", "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1500.29 Safari/537.36"); 
is = connection.getInputStream(); 
+1

是的,就是这样:从命令行执行类似'curl -v --user-agent“Java/1.6.0_14”http://imdbapi.org/?q = batman'的命令,出现403 Forbidden错误, HTML正文是这个网站的所有者(imdbapi.org)根据您的浏览器的签名禁止了您的访问。 –

相关问题