我正在尝试访问同一域/同一个asp.net应用程序的网页,这是受密码保护的.对于发起此呼叫的网页和正在访问的网页,凭据都是相同的.
这是代码,我不知道为什么我总是以登录表单html代码结束?
using (WebClient client = new WebClient())
{
client.QueryString.Add("ID", "1040"); //add parameters
//client.Credentials = CredentialCache.DefaultCredentials;
//I tried to add credentials like this
client.Credentials = new NetworkCredential("username", "password");
string htmlCode = client.DownloadString("http://domain.loc/testpage.aspx");
}
Run Code Online (Sandbox Code Playgroud) 我试图使用WebClientWinForms应用程序从Web下载文件.但是,我真的只想下载HTML文件.我想要忽略的任何其他类型.
我查了一下WebResponse.ContentType,但它的价值总是如此null.
任何人都知道原因是什么?
我试图使用WebClient.UploadFile与HTTPS URL,但我最终得到
"System.IO.IOException:由于意外的数据包格式,握手失败"
相同的代码与Http完全正常,但我想要的服务器有一个非常好的ssl证书.以下是与网络电话相关的任何内容:
var url = WebServiceCommunication.GetProtocolName() + "..."; //turns out to be "https://...
var wc = new WebClient();
//I am adding:
wc.Headers.Add(HttpRequestHeader.KeepAlive, "...")
wc.Headers.Add(HttpRequestHeader.AcceptLanguage, "...")
we.Headers.Add(HttpRequestHeader.Cookie, "...")
wc.UploadFile(url, "POST", filename);
Run Code Online (Sandbox Code Playgroud)
我正在添加和使用https的任何HttpRequestHeaders的问题是什么?或者,如果我想使用https,我是否错过了必要的标题?当SSL证书有效时,有没有人指出为什么这可以用于HTTP而不是HTTPS?
要连接到第三方服务,我需要制作一个Https Post.其中一个必备条件是发送自定义内容类型.
我正在使用WebClient,但我找不到如何设置它.我已经尝试创建一个新类并重写CreateRequest方法,但这会导致请求崩溃.
有没有办法做到这一点,而无需重写CopyHeadersTo方法?
提前致谢
编辑 CopyHeaderTo是我使用.NET Reflector看到的一种方法.它从GetWebRequest中取消,并从私有属性设置所有请求标头,包括Content-Type.
在我的应用程序中,我使用WebClient类通过简单地调用DownloadFile方法从Web服务器下载文件.现在我需要在下载之前检查某个文件是否存在(或者我只是想确保它存在).我有两个问题:
提前致谢!
有没有办法使用socks代理WebClient?特别DownloadString是它提供的方法?
我不想使用任何第三方的东西,如privoxy,freecap,我不能使用像Chilkat那样的商业库.我尝试使用来自http://www.mentalis.org/的东西,实际上我使用了它们的WebRequest实现,但它们似乎没有类似于WebClient的东西.
当Uri不包含名称时,有没有办法知道使用WebClient下载的文件的原始名称?
例如,在下载源自事先不知道名称的动态页面的站点中会发生这种情况.
使用我的浏览器,该文件获取正确的名称.但是如何使用WebClient完成这项工作?例如
WebClient wc= new WebClient();
var data= wc.DownloadData(@"www.sometime.com\getfile?id=123");
Run Code Online (Sandbox Code Playgroud)
使用DownloadFile()不是解决方案,因为此方法需要事先提供文件名.
RFC似乎建议客户端永久缓存响应:http: //www.w3.org/Protocols/rfc2616/rfc2616-sec10.html
10.3.2 301永久移动
已为所请求的资源分配了一个新的永久URI,并且此资源的任何将来的引用应该使用返回的URI之一.具有链接编辑功能的客户端应尽可能自动将对Request-URI的引用重新链接到服务器返回的一个或多个新引用.除非另有说明,否则该响应是可缓存的.
新的永久URI应该由响应中的Location字段给出.除非请求方法是HEAD,否则响应的实体应该包含一个带有指向新URI的超链接的短超文本注释.
如果收到301状态代码以响应GET或HEAD以外的请求,则用户代理不得自动重定向请求,除非用户可以确认,因为这可能会改变发出请求的条件.
Run Code Online (Sandbox Code Playgroud)Note: When automatically redirecting a POST request after receiving a 301 status code, some existing HTTP/1.0 user agents will erroneously change it into a GET request.
我很难找到任何主要浏览器的具体浏览器文档,说明他们如何处理这些.
我已经开始挖掘firefox的源代码,但很快就迷路了.
对于哪些(如果有的话)浏览器,以下情况是否属实,并且是否有适用于Firefox或IE的权威文档?:
第一次:
任何后续时间:
firefox internet-explorer webclient behavior http-status-code-301
我有一些代码可以下载一些RSS源.
我一直在使用WebClient或Argotic.Syndication.RssFeed库.
但这些都不可模糊:(
我绝对不希望每次运行单元测试时都能看到真正的RSS提要.
有没有人对我能做什么有任何建议?
我需要创建一个邪恶的包装器吗?如果是这样..对此有何建议?
我试图从URL下载文件,我必须在WebClient和HttpClient之间进行选择.我在互联网上引用了这篇文章和其他几篇文章.无处不在,由于其非常好的异步支持和其他.Net 4.5权限,建议使用HttpClient.但我仍然不完全相信并需要更多的投入.
我使用下面的代码从互联网上下载文件:
Web客户端:
WebClient client = new WebClient();
client.DownloadFile(downloadUrl, filePath);
Run Code Online (Sandbox Code Playgroud)
HttpClient的:
using (HttpClient client = new HttpClient())
{
using (HttpResponseMessage response = await client.GetAsync(url))
using (Stream streamToReadFrom = await response.Content.ReadAsStreamAsync())
{
}
}
Run Code Online (Sandbox Code Playgroud)
从我的角度来看,我只能看到使用WebClient的一个缺点,那就是非异步调用,阻塞调用线程.但是,如果我不担心阻塞线程或使用client.DownloadFileAsync()异步支持,该怎么办?
另一方面,如果我使用HttpClient,是不是我将文件的每个字节加载到内存中然后将其写入本地文件?如果文件太大,内存开销不会很贵吗?如果我们使用WebClient可以避免这种情况,因为它将直接写入本地文件而不会消耗系统内存.
那么,如果性能是我的首要任务,我应该使用哪种方法进行下载?如果我的上述假设是错误的,我想澄清一下,我也愿意接受替代方法.