c# – 获取带有网址编码斜杠的网址

我要发送HTTP GET到http://example.com//。我的第一个猜测将是这样的:

using (WebClient webClient = new WebClient())
{
  webClient.DownloadData("http://example.com/%2F");
}

不幸的是,我可以看到,实际发送的电线是:

GET // HTTP/1.1
Host: example.com
Connection: Keep-Alive

所以http://example.com/%2F在传输之前被翻译成http://example.com//

有没有办法实际发送这个GET请求?

当使用OCSP over HTTP / GET时,OCSP协议要求发送base-64编码的url编码,因此有必要发送一个实际/而不是一个“/”。

编辑:

这里是OCSP协议标准(RFC 2560附录A.1.1)的相关部分:

An OCSP request using the GET method is constructed as follows:

GET {url}/{url-encoding of base-64 encoding of the DER encoding of the OCSPRequest}

我对其他读物非常开放,但我看不出还有什么意思。

默认情况下,Uri类不允许在URI中转义/字符(/)(即使这在我的阅读RFC 3986中似乎是合法的)。

Uri uri = new Uri("http://example.com/%2F");
Console.WriteLine(uri.AbsoluteUri); // prints: http://example.com//

(注意:don’t use Uri.ToString打印URI。)

根据关于Microsoft Connect的bug report for this issue,这种行为是设计的,但你可以通过添加以下到您的app.config或web.config文件来解决它:

<uri>
  <schemeSettings>
    <add name="http" genericUriParserOptions="DontUnescapePathDotsAndSlashes" />
  </schemeSettings>
</uri>

(从http://stackoverflow.com/a/10415482转发,因为这是“官方”的方式来避免这个错误,而不使用反射修改私有字段。)

编辑:连接错误报告不再可见,但documentation for <schemeSettings>建议这种方法允许URI中的转义/字符。注意(根据该文章),可能会对不正确处理转义斜杠的组件存在安全隐患。

http://stackoverflow.com/questions/781205/getting-a-url-with-an-url-encoded-slash

本站文章除注明转载外,均为本站原创或编译
转载请明显位置注明出处:c# – 获取带有网址编码斜杠的网址