【问题标题】:Receiving gzip Content-Encoding with dotNetRDF使用 dotNetRDF 接收 gzip 内容编码
【发布时间】:2017-03-16 01:46:00
【问题描述】:

如何告诉 dotNetRDF 从远程三元存储请求和接受数据,其中响应使用 gzip 编码?

查看 SparqlHttpProtocolConnector 的 LoadGraph 方法的源代码,在我看来它没有设置 Accept-Encoding 标头的机制,我也没有看到任何可以处理 Content-Encoding 标头的逻辑。

我尝试修改LoadGraph以设置Accept-Encoding,然后内容返回正确的Content-Type和Content-Encoding,但是决定如何处理响应的代码行是

IRdfReader parser = MimeTypesHelper.GetParser(response.ContentType);

并且 GetParser 没有任何考虑 Content-Encoding 的逻辑。

但是,似乎这些部分都存在:肯定有基础设施可以处理 gzip 压缩文件。

有没有我想念的另一种方法来做到这一点,或者这会是一个新的功能请求吗?

谢谢。

【问题讨论】:

    标签: gzip content-encoding dotnetrdf


    【解决方案1】:

    您可以扩展SPARQLHttpProtocolConnector,然后覆盖ApplyCustomRequestOptions 方法以应用Accept-Encoding 标头。

    虽然MimeTypesHelper 不区分响应的Content-Encoding 标头,但您可以改用HttpWebRequest.AutomaticDecompression Property 来启用响应流的自动解压缩。同样,这可以在ApplyCustomRequestOptions 方法中设置。

    所以你的扩展类应该是这样的:

    public class CompressedSparqlHttpProtocolConnector : SparqlHttpProtocolConnector
    {
      // Define appropriate constructors with the parameters you need e.g.
      public CompressedSparqlHttpProtocolConnector(Uri serviceUri)
    : base(serviceUri) { }     
    
      protected override ApplyCustomRequestOptions(HttpWebRequest request)
      {
         // Request GZip encoded response, allow fallback to identity encoding
         request.Headers[HttpRequestHeader.ContentEncoding] = "gzip;q=1.0, identity;q=0.5"
    
         // Enable automatic decompression of the response
         request.AutomaticDecompression = DecompressionMethods.GZip;
      } 
    }
    

    【讨论】:

    • 感谢您的回复。但是 ApplyCustomRequestOptions 是在抽象类 BaseEndpoint 中定义的,它不是 SparqlHttpProtocolConnector 的基类之一。 (SparqlHttpProtocolConnector 派生自 BaseHttpConnector,其中包括 ApplyRequestOptions,但该方法不能被覆盖。)
    • 另外,你的意思是 HttpRequestHeader.AcceptEncoding 吗?作为一种解决方法,我按照您的建议创建了一个派生类,但从 SparqlHttpProtocolConnector 提升了整个 LoadGraph 功能,添加了上述功能。感谢您为我指明正确的方向。
    猜你喜欢
    • 2018-02-27
    • 2015-01-17
    • 2019-05-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-19
    • 2015-03-11
    相关资源
    最近更新 更多