【问题标题】:google Safebrowsing api v4 always returns empty responsegoogle Safebrowsing api v4 总是返回空响应
【发布时间】:2019-03-24 08:06:59
【问题描述】:

我在我的 android 代码中使用安全浏览 api v4。我正在使用 Asynctask 并使用 httpurlconnection 请求安全浏览 api。响应始终为空。

我也使用测试 url http://malware.testing.google.test/testing/malware/ 测试了我的连接,然后它也返回空。

class Malicious extends AsyncTask<String, Void, Wrapper> {
    private OnTaskCompleted listener;

    public Malicious(OnTaskCompleted listener){
        this.listener=listener;
    }

    @Override
    protected void onPreExecute() {
        super.onPreExecute();

    }

    protected Wrapper doInBackground(String... args) {
        String postURL = "https://safebrowsing.googleapis.com/v4/threatMatches:find?key=APIKEY";

        String requestBody = "{" +
                "    \"client\": {" +
                "      \"clientId\":      \"twittersentidetector\"," +
                "      \"clientVersion\": \"1.0\"" +
                "    }," +
                "    \"threatInfo\": {" +
                "      \"threatTypes\":      [\"MALWARE\", \"SOCIAL_ENGINEERING\"]," +
                "      \"platformTypes\":    [\"ANY_PLATFORM\"]," +
                "      \"threatEntryTypes\": [\"URL\"]," +
                "      \"threatEntries\": [" +
                "        {\"url\": \"" + args[0] + "\"}," +
                "      ]" +
                "    }" +
                "  }";



        URL url;
        StringBuffer response = new StringBuffer();
        try {
            url = new URL(postURL);
        } catch (MalformedURLException e) {
            throw new IllegalArgumentException("invalid url");
        }

        HttpURLConnection conn = null;
        try {
            conn = (HttpURLConnection) url.openConnection();
            conn.setDoOutput(false);
            conn.setDoInput(true);
            conn.setUseCaches(false);
            conn.setRequestMethod("POST");
            conn.setRequestProperty("Content-Type", "application/json");
            conn.setRequestProperty("User-Agent", USER_AGENT);
            conn.setRequestProperty("Accept-Language", "en-US,en;q=0.5");
            try( DataOutputStream wr = new DataOutputStream( conn.getOutputStream())) {
                byte[] b = requestBody.getBytes();
                wr.write(b);
                wr.flush();
                wr.close();
            }

            // handle the response
            int status = conn.getResponseCode();
            if (status != 200) {
                throw new IOException("Post failed with error code " + status);
            } else {
                BufferedReader in = new BufferedReader(new InputStreamReader(conn.getInputStream()));
                String inputLine;
                while ((inputLine = in.readLine()) != null) {
                    response.append(inputLine);
                }
                in.close();
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            if (conn != null) {
                conn.disconnect();
            }

            //Here is your json in string format
            String responseJSON = response.toString();
            Wrapper w = new Wrapper();
            w.responce = responseJSON;
            w.url = args[0];

            return w;
        }





    }

    @Override
    protected void onPostExecute(Wrapper xml) {

        if(xml.responce.length()==0){
            showtoast("safe");
        }
        else{
            showtoast("not safe");
            listener.onTaskCompleted(xml.url);
        }

    }

}

对于测试 url,它也显示安全。api 面板显示请求已发出,我不知道我做错了什么,我使用的是最新版本的 V4 API,但无论使用什么 URL,总是表明它是安全的。

【问题讨论】:

  • 在 onPostExecute 中将长度检查更改为 3 后,它运行良好

标签: java android httpurlconnection safe-browsing-api


【解决方案1】:

我设置了这个基本的 curl 脚本,它只返回空括号 {} 围绕共识进行搜索似乎是因为我正在查找的网站不是恶意的。只有您提供的示例(http://malware.testing.google.test/testing/malware/)给了我结果。我仍然不相信这能正常工作,但这是脚本。希望能帮助到你。 (将 API_KEY 替换为您的 api 密钥)

$参数 = 数组( 'client' => array('clientId'=>'Evolved Marketing', 'clientVersion'=>'1.5.2'), 'threatInfo' => array('threatTypes'=>array('MALWARE', 'SOCIAL_ENGINEERING'), 'platformTypes'=>array('ANY_PLATFORM'), 'threatEntryTypes'=>array('URL'), 'threatEntries' =>array(array('url'=>'http://malware.testing.google.test/testing/malware/'))), );

$json = json_encode($parameters);

$ch = curl_init(); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

curl_setopt($ch, CURLOPT_URL, 'https://safebrowsing.googleapis.com/v4/threatMatches:find?key=API_KEY');

curl_setopt($ch, CURLOPT_POST, TRUE);

curl_setopt($ch, CURLOPT_POSTFIELDS, $json);

curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-type: application/json'));

$response = curl_exec($ch);

print_r($response);

【讨论】:

  • 我是在 java 上做的,现在它在更改对 3 的响应的长度检查后运行良好。大多数 url 不起作用,因为它们已经被阻止并提供 404 错误。
【解决方案2】:
猜你喜欢
  • 2018-10-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-22
  • 1970-01-01
  • 1970-01-01
  • 2018-03-01
  • 1970-01-01
相关资源
最近更新 更多