我想发送一个HTTP GET http://example.com/%2F.我的第一个猜测是这样的:
using (WebClient webClient = new WebClient())
{
webClient.DownloadData("http://example.com/%2F");
}
Run Code Online (Sandbox Code Playgroud)
不幸的是,我可以看到实际上在线上发送的是:
GET // HTTP/1.1
Host: example.com
Connection: Keep-Alive
Run Code Online (Sandbox Code Playgroud)
因此http://example.com/%2F在传输之前会被翻译成http://example.com //.
有没有办法实际发送此GET请求?
当使用OCSP over HTTP/GET时,OCSP协议要求发送base-64编码的url编码,因此必须发送实际的%2F而不是'/'才能兼容.
编辑:
以下是OCSP协议标准(RFC 2560附录A.1.1)的相关部分:
使用GET方法的OCSP请求构造如下:
GET {url}/{对OCSPRequest的DER编码的base-64编码的url编码}
我对其他读物非常开放,但我看不出还有什么意思.
我有一个后台工作线程,它不断地将数据同步到远程服务器或从远程服务器同步数据.当我第一次运行应用程序时,一切似乎都正常.它每30秒发出一次Web请求,数据返回成功.
如果我让模拟器长时间运行,最终请求将因(400)错误请求而失败.所有后续请求都做同样的事情.如果我杀了应用程序并重新启动它...一切都很好.
有人有主意吗?代码如下.
public RestResponse<T> Execute<T>(RestRequest request) {
var restResponse = new RestResponse<T>();
var serializer = new JavaScriptSerializer();
var urlPath = baseUrl + "/" + request.Resource;
Console.WriteLine("Requesting: " + urlPath);
var httpRequest = (HttpWebRequest)HttpWebRequest.Create(new Uri(urlPath));
httpRequest.Headers = request.Headers;
foreach (string key in clientHeaders.Keys)
httpRequest.Headers.Add(key, clientHeaders[key]);
httpRequest.Headers.Add("Accept-Encoding", "gzip,deflate");
Authenticator.Authenticate(httpRequest);
httpRequest.Method = request.Method.ToString();
HttpWebResponse httpResponse = null;
try {
if ((request.Method == Method.POST) && (!request.IsJsonPost))
SetPostData(httpRequest, request);
if ((request.Method == Method.POST) && (request.IsJsonPost)){
SetJsonPostData(httpRequest, request);
}
httpResponse = (HttpWebResponse)httpRequest.GetResponse();
var reader = …Run Code Online (Sandbox Code Playgroud) 代码本身并不复杂,它只是不能正常工作:
Uri uri = new Uri("https://www.google.com/webmasters/tools/feeds/sites/http%3A%2F%2Fwww.mydomain.co.uk%2F");
WebRequest.Create(uri);
Run Code Online (Sandbox Code Playgroud)
我从服务器上得到一个"错误请求",经过多次挖掘,发现Uri正在变成
https://www.google.com/webmasters/tools/feeds/sites/http%3A//www.mydomain.co.uk/
这不是我要求的,所以它有一个旋转
有办法阻止这个吗?