解码Google安全浏览v3协议缓冲区

时间:2015-10-15 22:18:57

标签: c# google-api protocol-buffers safe-browsing protobuf-csharp-port

我正在尝试解码从Google的安全浏览API返回的协议缓冲区。

我正在使用C#,但Java解决方案也可以使用,因为它或多或少都是一样的。

我目前的不完整代码是这样的

    public void Download()
    {
        var lists = new List<string>
        {
            "goog-malware-shavar",
            "goog-unwanted-shavar",
            "googpub-phish-shavar"
        };
        var protocol = "https://";
        var uriBase = $"safebrowsing.google.com/safebrowsing/downloads?client=api&key={_googleSafeBrowsingApiKey}&appver=1.5.2&pver=3.0";
        var requestUrl = protocol + uriBase;
        var content = new StringContent("googpub-phish-shavar;\ngoog-malware-shavar;\ngoog-unwanted-shavar;\n");
        using (var client = new HttpClient())
        {
            var httpResult = client.PostAsync(requestUrl, content).Result;
            var result = httpResult.Content.ReadAsStringAsync().Result;
            var lines = result.Split('\n');
            var firstUrl = lines[2].Substring(2);
            var newRes = client.GetAsync("https://" + firstUrl).Result.Content.ReadAsByteArrayAsync().Result;
            var len = BitConverter.ToUInt32(newRes, 0);
            var newArray = newRes.Skip(3).Take((int)len).ToArray();
            try
            {
                ChunkData chunk =
                ChunkData.Parser.ParseFrom(newArray);
                if (chunk == null)
                {

                }
            }
            catch
            {

            }
        }

    }

我不确定要传递给ChunkData.Parser.ParseFrom

的内容

根据文档,结果应该以无符号的32位整数开始,这就是为什么我使用var len = BitConverter.ToUInt32(newRes,0)来尝试获取这个数字。我认为这应该是块中的字节数,但是这个数字远大于整个字节数组。

如何将字节数组的正确部分提供给ChunkData解析器?

0 个答案:

没有答案