Google安全浏览HTTP POST - 403回复

时间:2015-07-02 10:59:06

标签: java google-api safe-browsing

我正在开发一个针对某些网址查询Google安全浏览的程序,但我收到的错误是我认为我不应该这样做。

我发送了以下请求:

2
http://google.com
http://facebook.com

通过POST发送到:https://sb-ssl.google.com/safebrowsing/api/lookup?client=api&apikey=[KEY]&appver=1.5.2&pver=3.1

但是,我收到了403回复。

这是文档针对HTTP POST查找错误所说的内容:

  

服务器为POST请求生成以下HTTP错误代码:

     

•200:至少有一个查询过的URL在网络钓鱼,恶意软件或不需要的软件列表中匹配。实际结果通过回复正文返回。

     

•204:所查询的网址中没有一个与网络钓鱼,恶意软件或不需要的软件列表相匹配,并且未返回任何响应正文。

     

•400:错误请求 - 未正确形成HTTP请求。

     

•401:未授权 - 未授权API密钥。

     

•503:服务不可用 - 服务器无法处理请求。除了正常的服务器故障外,这也可能表明客户端因发送过多请求而被“限制”。

响应代码403未列出,但我已收到。

我已经对我的API密钥进行了三重检查,并确保为我的项目启用了API。我使用的是服务器密钥,但我也试过了一个浏览器密钥。

我也试过做一个GET请求,这确实有效,但我无法让POST工作。发生了什么事?

这是我的代码:

try {
   String baseURL="https://sb-ssl.google.com/safebrowsing/api/lookup";
   String arguments = "";
   arguments +=URLEncoder.encode("client", "UTF-8") + "=" + URLEncoder.encode("api", "UTF-8") + "&";
   arguments +=URLEncoder.encode("apikey", "UTF-8") + "=" + URLEncoder.encode("[KEY]", "UTF-8") + "&";
   arguments +=URLEncoder.encode("appver", "UTF-8") + "=" + URLEncoder.encode("1.5.2", "UTF-8") + "&";
   arguments +=URLEncoder.encode("pver", "UTF-8") + "=" + URLEncoder.encode("3.1", "UTF-8");

   // Construct the url object representing cgi script
   URL url = new URL(baseURL + "?" + arguments);    

   // Get a URLConnection object, to write to POST method
   HttpURLConnection connect = (HttpURLConnection) url.openConnection();
   connect.setRequestMethod("POST");

   // Specify connection settings
   connect.setDoInput(true);
   connect.setDoOutput(true);

   // Get an output stream for writing
   OutputStream output = connect.getOutputStream();
   PrintStream pout = new PrintStream (output);
   pout.print("2");
   pout.println();
   pout.print("http://www.google.com");
   pout.println();
   pout.print("http://www.facebook.com");
   pout.close();                   

   BufferedReader in = new BufferedReader(new InputStreamReader(connect.getInputStream()));

   String decodedString;
   while ((decodedString = in.readLine()) != null) {
      System.out.println("w: " + decodedString);
   }
   in.close();
} catch(Exception e) {
   e.printStackTrace();
}

1 个答案:

答案 0 :(得分:1)

我发现了错误。 CGI参数不正确。它应该是key而不是apikey。仍然很奇怪,你得到一个未记录的响应代码。