如何循环通过从Windows Phone 7中的HttpWebResponse获取的WebHeaderCollection来获取密钥和值?我们尝试过Enumerator.Current; 有了这个,我们只得到钥匙,而不是价值.我们这样做是为了获得重定向的URL.
在我的网站的HTTP响应标头中,它返回包含以下值的标头.
"Cache-Control: max-age=3600"
Run Code Online (Sandbox Code Playgroud)
是几秒钟还是几分钟?
我正在尝试使用ASP.NET网站创建一个HttpWebRequest/HttpWebResponse会话,以便稍后通过url params解析HTML表单(这部分我知道该怎么做),但我不明白如何解析和设置cookie如会话ID.在Fiddler中,它显示ASP.NET会话ID是通过Set-Cookie在对url的/ path请求的响应中返回的,但是如何提取此会话ID并将其设置为下一个HttpWebRequest的cookie ?我知道这个Set-Cookie标头可以在HttpWebResponse.Headers.Keys中找到,但有解析它的直接路径吗?谢谢!
我在.NET上的HTTP请求有一个低性能问题.对localhost上的REST API的HTTP GET请求大约需要500毫秒才能完成.我花了很多时间来解决它.我曾尝试过很多办法:HttpClient,HttpWebRequest,WebClient和RestSharp.他们都没有工作.互联网上的大多数解决方案都说要设置Proxy参数,null但它仍然无法更快地运行.
我发现减少这个时间的唯一方法是将请求的Keep-Alive参数设置为false:
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(uri);
request.Method = "GET";
request.KeepAlive = false;
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
Run Code Online (Sandbox Code Playgroud)
这非常有效.时间减少到7-10毫秒.但现在由于某些原因我需要使用HttpClient而不是HttpWebRequest.而且我找不到如何将Keep-Alive设置为false HttpClient.我发现的唯一一件事就是如何通过将"连接"标题设置为"保持活跃"来将其设置为true.
我在HttpClient上使用此代码进行POST请求:
HttpClient _http = new HttpClient();
_http.DefaultRequestHeaders.Accept.Clear();
_http.DefaultRequestHeaders.Add("Connection", "Keep-Alive");
_http.DefaultRequestHeaders.Add("Keep-Alive", "timeout=600");
var content = new StringContent(
request, Encoding.UTF8, "application/%appname%+xml");
content.Headers.ContentType.Parameters.Add(
new NameValueHeaderValue("type", "payload"));
HttpResponseMessage response = await _http.PostAsync(uri, content);
Run Code Online (Sandbox Code Playgroud)
它仍然需要大约500-600毫秒才能完成.
Jon Skeet 在我的SOApiDotNet代码(用于pre-alpha Stack Overflow API的.NET库)上发表评论(通过推特):
@ maximz2005我注意到的一件事就是快速浏览源代码:你没有处理(原文如此)WebResponses.FTW"使用"声明.
他表示我需要将这些Web会话包装在"using"语句中.但是,我有一个问题:我应该包装整个事情,从HttpWebRequest开始,还是应该在"using"语句之外创建WebRequest然后将Response包装在里面?我感觉不同的是,在前者中,两个物体都会被处理掉 - 这是正确的吗?
提前致谢.
我正在尝试使用HttpWebResponse.GetResponse()和Streamreader.ReadToEnd()在C#中实现有限的Web爬虫(仅限几百个站点),也尝试使用StreamReader.Read()和循环来构建我的HTML字符串.
我只下载大约5-10K的页面.
这一切都很慢!例如,平均GetResponse()时间约为半秒,而平均StreamREader.ReadToEnd()时间约为5秒!
所有站点都应该非常快,因为它们非常靠近我的位置,并且具有快速的服务器.(在资源管理器中几乎没有任何东西到D/L)并且我没有使用任何代理.
我的Crawler有大约20个线程同时从同一个站点读取.这会导致问题吗?
如何减少StreamReader.ReadToEnd DRASTICALLY?
我收到以下异常:
服务器提交了协议违规.Section = ResponseHeader Detail = CR必须后跟LF
从这个问题:
HttpWebRequestError:服务器提交了协议违规.Section = ResponseHeader Detail = CR必须后跟LF
我知道我需要将useUnsafeHeaderParsing设置为True.
这是我的代码:
HttpWebRequest myReq = (HttpWebRequest)WebRequest.Create(url);
WebResponse myResp = myReq.GetResponse(); //exception is thrown here
Run Code Online (Sandbox Code Playgroud)
useUnsafeHeaderParsing是HttpWebRequestElement类的属性.
如何将其集成到上面的代码中?
我想知道是否有一个简单的方法来获得异步httpwebrequest的响应.
我已经在这里看到了这个问题但是我试图做的就是将字符串形式的响应(通常是json或xml)返回到另一个方法,然后我可以解析它/相应地处理它.
下面是一些代码:
我在这里有这两个静态方法我认为是线程安全的,因为所有的参数都被传入并且方法没有共享的局部变量?
public static void MakeAsyncRequest(string url, string contentType)
{
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
request.ContentType = contentType;
request.Method = WebRequestMethods.Http.Get;
request.Timeout = 20000;
request.Proxy = null;
request.BeginGetResponse(new AsyncCallback(ReadCallback), request);
}
private static void ReadCallback(IAsyncResult asyncResult)
{
HttpWebRequest request = (HttpWebRequest)asyncResult.AsyncState;
try
{
using (HttpWebResponse response = (HttpWebResponse)request.EndGetResponse(asyncResult))
{
Stream responseStream = response.GetResponseStream();
using (StreamReader sr = new StreamReader(responseStream))
{
//Need to return this response
string strContent = sr.ReadToEnd();
}
}
manualResetEvent.Set();
}
catch (Exception ex)
{ …Run Code Online (Sandbox Code Playgroud) 请参阅以下代码:
CookieContainer cookieJar = new CookieContainer();
HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create("http://www.google.com");
request.CookieContainer = cookieJar;
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
int cookieCount = cookieJar.Count;
Run Code Online (Sandbox Code Playgroud)
我如何在里面获取cookie信息cookieJar?(所有这些,不只是针对特定域.)
我如何添加或删除cookie?
似乎GetResponseAsync在Async/Await中不接受cancellationToken.所以问题是我如何取消以下程序,只要我需要从响应中收集Cookie:
using (HttpWebResponse response = (HttpWebResponse) await request.GetResponseAsync())
{
cookies.Add(response.Cookies);
}
Run Code Online (Sandbox Code Playgroud)
实现上述目标的替代代码也是受欢迎的.
c# httpwebrequest httpwebresponse async-await cancellation-token
httpwebresponse ×10
c# ×8
.net ×2
cookies ×2
.net-4.0 ×1
async-await ×1
asynchronous ×1
c#-4.0 ×1
http ×1
httpclient ×1
performance ×1
rest ×1
setcookie ×1
streamreader ×1
using ×1
web-crawler ×1