WebResponse response;
try
{
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
request.Timeout = 20000;
response = request.GetResponse();
request = (HttpWebRequest)WebRequest.Create(url2);
response = request.GetResponse();
}
catch(Exception ex)
{
//do something
}
finally
{
}
Run Code Online (Sandbox Code Playgroud)
应该在哪里调用response.Close()?
在尝试每个GetResponse()之后?
在最后一次GetResponse()尝试 - 一次?
我正在寻找一个示例,说明如何在C#中将xml文档放在http请求的消息体中,然后解析响应.我已经阅读了文档,但我想看一个例子,如果有一个可用的.有人有例子吗?
谢谢
我要求100页,所有404.我写了
{
var s = DateTime.Now;
for(int i=0; i < 100;i++)
DL.CheckExist("http://google.com/lol" + i.ToString() + ".jpg");
var e = DateTime.Now;
var d = e-s;
d=d;
Console.WriteLine(d);
}
static public bool CheckExist(string url)
{
HttpWebRequest wreq = null;
HttpWebResponse wresp = null;
bool ret = false;
try
{
wreq = (HttpWebRequest)WebRequest.Create(url);
wreq.KeepAlive = true;
wreq.Method = "HEAD";
wresp = (HttpWebResponse)wreq.GetResponse();
ret = true;
}
catch (System.Net.WebException)
{
}
finally
{
if (wresp != null)
wresp.Close();
}
return ret;
}
Run Code Online (Sandbox Code Playgroud)
两次运行显示需要00:00:30.7968750和00:00:26.8750000.然后我尝试了Firefox并使用以下代码
<html> …Run Code Online (Sandbox Code Playgroud) 我有一个用C#编写的ASP.NET 3.5服务器应用程序.它使用HttpWebRequest和HttpWebResponse向REST API发出出站请求.
我已经设置了一个测试应用程序来在不同的线程上发送这些请求(模糊地模仿服务器的并发性).
请注意,这更像是单声道/环境问题,而不是代码问题; 所以请记住,下面的代码不是逐字的; 只是功能位的剪切/粘贴.
这是一些伪代码:
// threaded client piece
int numThreads = 1;
ManualResetEvent doneEvent;
using (doneEvent = new ManualResetEvent(false))
{
for (int i = 0; i < numThreads; i++)
{
ThreadPool.QueueUserWorkItem(new WaitCallback(Test), random_url_to_same_host);
}
doneEvent.WaitOne();
}
void Test(object some_url)
{
// setup service point here just to show what config settings Im using
ServicePoint lgsp = ServicePointManager.FindServicePoint(new Uri(some_url.ToString()));
// set these to optimal for MONO and .NET
lgsp.Expect100Continue = false;
lgsp.ConnectionLimit = 100;
lgsp.UseNagleAlgorithm = true; …Run Code Online (Sandbox Code Playgroud) 从API发送的XML
<AuthenticationResult xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
<PAPIErrorCode>0</PAPIErrorCode>
<ErrorMessage/>
<AccessToken>StringAccessToken</AccessToken>
<AccessSecret>StringAccessToken</AccessSecret>
<PolarisUserID>PolarisSampleUser</PolarisUserID>
<BranchID>7</BranchID>
<AuthExpDate>2013-05-27T16:57:46.323</AuthExpDate>
</AuthenticationResult>
Run Code Online (Sandbox Code Playgroud)
响应类
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Xml;
using System.Xml.Schema;
using System.Xml.Serialization;
namespace PAPIAutomatedTestingTool
{
[XmlRoot(ElementName="AuthorizationResult")]
public class AuthorizationResult
{
public int PAPIErrorCode { get; set; }
public string ErrorMessage { get; set; }
public string AccessToken { get; set; }
public string AccessSecret { get; set; }
public int PolarisUserID { get; set; }
public int BranchID { get; set; }
public DateTime …Run Code Online (Sandbox Code Playgroud) 在调试资源泄漏问题时,我注意到System.Net.WebException(非一次性类型)包含对System.Net.WebResponse(一次性类型)的引用.我想知道在显式处理WebResponse以下代码段中的as 时是否应该处理此引用.
using (WebClient client = new WebClient())
{
WebException ex = Assert.Throws<WebException>(() => client.OpenRead(myUri));
Assert.That(
((HttpWebResponse)ex.Response).StatusCode,
Is.EqualTo(HttpStatusCode.ServiceUnavailable));
}
Run Code Online (Sandbox Code Playgroud)
该WebException.WebResponse引用是现有引用的副本WebClient.我认为它会被处理掉,WebClient.Dispose但事实并非如此,因为WebClient它不会覆盖受保护的Component.Dispose(bool)基本方法.实际上,反汇编表明WebResponse资源从未被处理掉,而是在不再需要时设置为null.
public Stream OpenRead(Uri address)
{
Stream stream2;
// --- removed for brevity ---
WebRequest request = null;
this.ClearWebClientState();
try
{
request = this.m_WebRequest = this.GetWebRequest(this.GetUri(address));
Stream responseStream = (this.m_WebResponse = this.GetWebResponse(request)).GetResponseStream();
// --- removed for brevity ---
stream2 = responseStream; …Run Code Online (Sandbox Code Playgroud) 我似乎无法弄清楚为什么我一直收到以下错误:
Bytes to be written to the stream exceed the Content-Length bytes size specified.
Run Code Online (Sandbox Code Playgroud)
在以下行:
writeStream.Write(bytes, 0, bytes.Length);
Run Code Online (Sandbox Code Playgroud)
这是在Windows窗体项目上.如果有人知道这里发生了什么,我肯定欠你一个.
private void Post()
{
HttpWebRequest request = null;
Uri uri = new Uri("xxxxx");
request = (HttpWebRequest)WebRequest.Create(uri);
request.Method = "POST";
request.ContentType = "application/x-www-form-urlencoded";
XmlDocument doc = new XmlDocument();
doc.Load("XMLFile1.xml");
request.ContentLength = doc.InnerXml.Length;
using (Stream writeStream = request.GetRequestStream())
{
UTF8Encoding encoding = new UTF8Encoding();
byte[] bytes = encoding.GetBytes(doc.InnerXml);
writeStream.Write(bytes, 0, bytes.Length);
}
string result = string.Empty;
request.ProtocolVersion = System.Net.HttpVersion.Version11;
request.KeepAlive = false;
try …Run Code Online (Sandbox Code Playgroud) 我试图取代这个:
void ProcessRequest(object listenerContext)
{
var context = (HttpListenerContext)listenerContext;
Uri URL = new Uri(context.Request.RawUrl);
HttpWebRequest.DefaultWebProxy = null;
HttpWebRequest httpWebRequest = (HttpWebRequest)WebRequest.Create(URL);
httpWebRequest.Method = context.Request.HttpMethod;
httpWebRequest.Headers.Clear();
if (context.Request.UserAgent != null) httpWebRequest.UserAgent = context.Request.UserAgent;
foreach (string headerKey in context.Request.Headers.AllKeys)
{
try { httpWebRequest.Headers.Set(headerKey, context.Request.Headers[headerKey]); }
catch (Exception) { }
}
using (HttpWebResponse httpWebResponse = (HttpWebResponse)httpWebRequest.GetResponse())
{
Stream responseStream = httpWebResponse.GetResponseStream();
if (httpWebResponse.ContentEncoding.ToLower().Contains("gzip"))
responseStream = new GZipStream(responseStream, CompressionMode.Decompress);
else if (httpWebResponse.ContentEncoding.ToLower().Contains("deflate"))
responseStream = new DeflateStream(responseStream, CompressionMode.Decompress);
MemoryStream memStream = new MemoryStream();
byte[] respBuffer …Run Code Online (Sandbox Code Playgroud) 与来自HttpWebResponse.GetResponseStream()的流一起使用的最佳缓冲区大小是多少?
在线示例从256b到5Kb不等.是什么赋予了?我想缓冲区大小可能是情境化的.如果是这样,使用什么类型的缓冲区大小的情况是什么?
谢谢.
我正在编写一个程序,需要.exe从网站下载文件,然后将其保存到硬盘驱动器.将.exe存储在我的网站,它的网址如下(这不是真正的URI只是一个我提出了对这个问题的目的):
http://www.mysite.com/calc.exe
Run Code Online (Sandbox Code Playgroud)
经过许多网络搜索和摸索示例之后,到目前为止,我已经提出了代码:
HttpWebRequest webRequest = (HttpWebRequest)WebRequest.Create(http://www.mysite.com/calc.exe);
HttpWebResponse webResponse = (HttpWebResponse)webRequest.GetResponse();
Stream responseStream = webResponse.GetResponseStream();
StreamReader streamReader = new StreamReader(responseStream);
string s = streamReader.ReadToEnd();
Run Code Online (Sandbox Code Playgroud)
如您所见,我正在使用StreamReader该类来读取数据.调用之后ReadToEnd,流阅读器是否包含我的.exe的(二进制)内容?我可以只将文件的内容写入StreamReader文件(名为calc.exe),我会成功下载.exe吗?
我想知道为什么StreamReader ReadToEnd返回一个字符串.在我的情况下,这个字符串是否是calc.exe的二进制内容?