我正在构建一个允许用户从URL下载文件的库.我正在考虑的一个选项是让用户为文件指定预期的MD5校验和; 库的GetFile(string url)函数确保下载的流的校验和与用户指定的校验和匹配.
知道HttpWebResponse.GetResponseStream()返回的NetworkStream是不可寻的,我找到了一种复制流的方法,这要归功于这个问题的答案:如何在C#中读取两次Http响应流?.在我走得更远之前,我想弄清楚这种重复的记忆含义是什么; 不幸的是,Google和MSDN上的多次搜索都化为乌有.
该库对要下载的文件的大小没有限制.我的问题是,如果用户选择2GB文件,.NET 2.0中的MemoryStream实现是否足够智能,足以有效地使用PageFile和RAM,系统不会因VM崩溃而开始爬行?此外,Jon Skeet对另一个问题的评论给了我一些思考 - 他断言即使在处理了MemoryStream后,内存也不是100%免费的.我如何以及何时确保实际释放内存?它会根据系统的要求(和必要性)发布吗?
谢谢,Manoj
我从HttpWebRequest(使用修改后的版本Jeff Richter的CCR包装器)获得响应,然后检查一些标头以决定是否继续下载.有时我可能不想继续,所以我因此发出response.Close和request.Abort.是否有必要发出GetResponseStream然后关闭流,或者当调用response.Close时这是隐式的吗?
发出GetResponse后,文档说明:
您必须调用Close方法来关闭流并释放连接.如果不这样做可能会导致您的应用程序用完连接.
那么这是否意味着一旦我们得到响应,那么获取流并关闭它是必须的吗?
我们看到一些相当奇怪的问题,其中挂起的下载最终会淹没系统.这似乎是资源泄漏的最强候选者,但想知道是否有其他人有这个问题的经验.
顺便说一句:GetResponseStream是否安全,假设它是同一个流?
我已成功连接到登录页面,但是,我不确定如何登录并获取登录后的文件。下面是我用来进行连接的代码。
private static bool bypassAllCertificateStuff(object sender, X509Certificate cert, X509Chain chain, System.Net.Security.SslPolicyErrors error)
{
return true;
}
public static void Processing()
{
string url = "https://app/templat";
HttpWebRequest request;
HttpWebResponse response;
CookieContainer cookies;
ServicePointManager.ServerCertificateValidationCallback =
System.Net.ServicePointManager.ServerCertificateValidationCallback =
((sender, certificate, chain, sslPolicyErrors) => true);
System.Net.ServicePointManager.ServerCertificateValidationCallback
= ((sender, cert, chain, errors) => cert.Subject.Contains("YourServerName"));
ServicePointManager.ServerCertificateValidationCallback += new RemoteCertificateValidationCallback(bypassAllCertificateStuff);
try
{
request = (HttpWebRequest)WebRequest.Create(url);
request.AllowAutoRedirect = false;
request.Method = "POST";
request.ContentType = "application/x-www-form-urlencoded";
request.CookieContainer = new CookieContainer();
response = (HttpWebResponse)request.GetResponse();
if (response.StatusCode == HttpStatusCode.OK)
{
cookies …Run Code Online (Sandbox Code Playgroud) 请有人帮助我.我已经研究了几个小时,已经尝试了很多不同的建议修复,我完全失去了为什么我仍然得到这个错误.
我有一个ASP.NET 4.0网页,其中包含以下代码:
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(targetHref);
// request.KeepAlive = false;
// request.ProtocolVersion = System.Net.HttpVersion.Version10;
// request.ServicePoint.Expect100Continue = false;
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
Run Code Online (Sandbox Code Playgroud)
我已经尝试了我可以想象的所有组合,不评论上述3条注释行.
我在web.config中有这个:
<system.net>
<settings>
<httpWebRequest useUnsafeHeaderParsing ="true"/>
</settings>
</system.net>
Run Code Online (Sandbox Code Playgroud)
当我在我的开发机器上运行Fiddler时,页面运行无例外,fiddler在返回的顶部显示此消息:
HTTP/1.0 200这个错误的服务器没有返回标头
如果没有Fiddler运行,我每次都会收到错误request.GetResponse().
我正在执行Web请求以登录我的Web服务,但是我遇到了问题。我需要等到登录完成后才能结束启动登录的方法,因为我需要返回一个表示登录是否正确的布尔值。在以下代码中,我在需要等待“ httpWebRequest.BeginGetResponse(...)”结果的位置添加了注释。
public async Task<bool> login(string user, string passwrd)
{
mLoginData.setUserName(user);
mLoginData.setPasswd(passwrd);
string serviceURL = mBaseURL + "/pwpcloud/service/user/login";
//build the REST request
// HTTP web request
var httpWebRequest = (HttpWebRequest)WebRequest.Create(serviceURL);
httpWebRequest.ContentType = "application/json";
httpWebRequest.Method = "POST";
// Write the request Asynchronously
using (var stream = await Task.Factory.FromAsync<Stream>(httpWebRequest.BeginGetRequestStream, httpWebRequest.EndGetRequestStream, null))
{
string parameters = "{\"username\":\"" + user + "\",\"password\":\"" + passwrd + "\"}";
byte[] byteArray = Encoding.UTF8.GetBytes(parameters);
// Write the bytes to the stream
await stream.WriteAsync(byteArray, 0, byteArray.Length);
}
//httpWebRequest.BeginGetResponse(new AsyncCallback(OnGettingLoginResponse), …Run Code Online (Sandbox Code Playgroud) 我无法使用 HttpWebRequest 向 URL 发出发布请求。我已经应用了我在网上看到的所有建议。大多数答案都建议指定一个用户代理。我已经这样做了,并且也提供了超时,但我仍然得到了超时。我看到另一篇文章提到要指定 readwritetimeout 。我仍然得到相同的响应“服务器超时”。使用浏览器发布帖子在一秒钟内即可完成,但使用 C# 代码会出现超时问题。这是我的代码:
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(Url);
request.ContentType = "application/x-www-form-urlencoded";
request.UserAgent = "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2288.6 Safari/537.36";
request.Method = "POST";
request.KeepAlive = true;
request.CookieContainer = new CookieContainer();
request.Accept = "*/*";
request.ReadWriteTimeout = System.Threading.Timeout.Infinite;
request.Headers.Add("Accept-Encoding: gzip, deflate");
request.Headers.Add("Accept-Language: en-US");
byte[] byteArray = Encoding.UTF8.GetBytes(postData);
request.ContentLength = byteArray.Length;
Stream dataStream = request.GetRequestStream();
dataStream.Write(byteArray, 0, byteArray.Length);
dataStream.Close();
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
dataStream = response.GetResponseStream();
StreamReader reader = new StreamReader(dataStream);
string Response = …Run Code Online (Sandbox Code Playgroud) 我正在使用 API 和 Express 制作一个简单的 Web 应用程序。\n但我得到的输出与预期不同。我的输出包含包含HTML标签的文本。
\n\n这是我的代码。
\n\nconst express = require(\'express\');\nconst https = require(\'https\');\nconst app = express();\n\napp.get(\'/\', function(req, res) {\n const url =\n \'https://api.openweathermap.org/data/2.5/weather?q=London,uk&units=metric&appid=0333cb6bfed722ca09f1062ec1ea9ca1\';\n https.get(url, function(response) {\n console.log(response.statusCode + \' OK\');\n response.on(\'data\', function(data) {\n const weatherData = JSON.parse(data);\n const temp = weatherData.main.temp;\n const desc = weatherData.weather[0].description;\n const icon = weatherData.weather[0].icon;\n const imageURL = \'http://openweathermap.org/img/wn/\' + icon + \'@2x.png\';\n\n res.write(\'<h3>The weather is currently \' + desc + \'</h3>\');\n //res.write(\'<img src=\' + imageURL + \'>\');\n res.write(\n \'<h1>The …Run Code Online (Sandbox Code Playgroud) 假设我正在检索网址,如下所示:
string url = "http://www.somesite.com/somepage.html"
HttpWebRequest req = (HttpWebRequest)WebRequest.Create(url);
HttpWebResponse resp = (HttpWebResponse)req.GetResponse();
Run Code Online (Sandbox Code Playgroud)
有没有办法可以看到目标网址的IP地址?需要单独拨打电话吗?
谢谢
我有一个System.Net.HttpWebRequest用于与远程主机通信的Powershell脚本.
我创建请求,相应地设置属性并调用getresponse()并getresponsestream()从服务器读取整个响应到字符串.只要服务器以"200 OK"消息响应,这就可以正常工作.
如果服务器有一个"400错误的请求"或任何其他错误代码,响应getresponse()并getresponsestream()抛出异常和返回任何结果.我的问题是我需要的响应头中包含更详细的错误信息,因此我可以自己进行错误处理.
我如何能够检索此400 Bad Request信号?
我相信我以前做过这个,但我似乎无法记住:(
HttpWebRequest request = (HttpWebRequest)WebRequest.Create("www.example.com");
request.Method = "GET";
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
Run Code Online (Sandbox Code Playgroud)
然后如何将响应写入页面?
非常感谢.
httpwebresponse ×10
c# ×5
asp.net ×2
.net ×1
abort ×1
dns ×1
express ×1
html ×1
ip-address ×1
javascript ×1
memorystream ×1
node.js ×1
powershell ×1
rest ×1
stream ×1
web-config ×1