0

我遇到“著名”错误:服务器返回 HTTP 响应代码:URL 为 403。我必须发送很多查询(+-2000)来填充我的数据库。但是,50-100首先工作,然后所有以下触发错误403。我不知道为什么......

这是我的代码:

public static ArrayList<String> querying(String name){
    URL url = null;
    String inputLine;
    ArrayList<String> resultArray = new ArrayList<String>();
    BufferedReader in;
    try {
        url = new URL(s);
    } catch (MalformedURLException e) {
        e.printStackTrace();
    }    
    try {
        HttpURLConnection con = (HttpURLConnection) url.openConnection();
        con.addRequestProperty("User-Agent", "Mozilla/4.0");
        in = new BufferedReader(new InputStreamReader(con.getInputStream()));
        while ((inputLine = in.readLine()) != null) {
            ...
        }
        in.close();
        con.disconnect();

    } catch (IOException e) {
        e.printStackTrace();
    }
    return resultArray;
}

哪里s是:

"https://www.googleapis.com/freebase/v1/mqlread?query={\"id\":\"/en/"+name+"\", \"name\": null, \"type\":\"/base/popstra/celebrity\",\"/base/popstra/celebrity/friendship\": [{\"participant\": [] }] }".replace(" ", "")

我试图在网上找到有关此错误的一些信息,但尽管我发现了(例如“addRequestProperty”),但它仍然无法正常工作。

4

1 回答 1

2

您问题中的 URL 表明您没有使用 API 密钥。

  • 使用 API 密钥,您应该能够每天进行 100k/10k 读取/写入(根据 Freebase 文档)

  • 如果没有 API 密钥,您的配额将被限制在一个小得多的数字上,并且当您超过时您会收到 403 响应。这是为了防止滥用 API 基础设施,以便每个人都能获得公平的 API 请求份额。

请按照Freebase 文档中的入门说明获取 API 密钥。

于 2012-10-14T13:30:46.687 回答