Tag: webclient

慢WebClient.DownloadString?

我正在使用ASP.Net 3.5运行的Web应用程序 在应用程序的某个地方,我正在调用外部系统。 此调用包括从特定URL下载字符串: string targetUrl = BuildMyUrl(); WebClient wc = new WebClient(); string data = wc.DownloadString(targetUrl); 此代码在可接受的响应时间(低于500毫秒)下运行良好。 但是,在特定情况下,此响应时间超过15秒。 我可以重现行为,我可以清楚地看到长时间是在DownloadString调用。 我不明白为什么在我的场景中会发生这种情况 。 你会说:“嘿,这是目标系统很慢”。 但我无法重现我的应用程序之外的行为(我已经构建了一个隔离错误代码的小型控制台应用程序。永远不会遇到任何问题)。 我现在不知道在哪里了解这个问题。 什么会导致简单的下载数据冗长? 仅供参考:目标系统是身份validation服务。 目标url是实物: http S :// mysystem / validate?ticket = XXXYYY 也许https协议是个问题。 在IIS下使用WebClient类是否可以改变WebClient的行为? [编辑]我试过了: 要将WebClient对象的Proxy属性显式设置为null 我用这段代码替换了DownloadData调用: var req =(HttpWebRequest)WebRequest.CreateDefault(new Uri(targetUrl)); using(var response =(HttpWebResponse)req.GetResponse()){using(var sr = new StreamReader(response.GetResponseStream())){data = sr.ReadToEnd(); }} […]

WebClient.CancelAsync – 文件仍在下载

我正在尝试使用Asp.NET Core创建一个Web API,它公开路由以启动和取消大文件的长下载。 服务器应该能够同时处理多个下载。 使用WebClient.DownloadFileAsync执行下载,以便缩短响应时间并返回downloadId供以后使用。 WebClient的实例作为值存储在静态字典中,其对应的key自然是downloadId 。 应通过访问与downloadId键对应的字典值检索的客户端实例上的WebClient.CancelAsync取消downloadId 。 以下代码在下载完成而未被取消时完美运行; 正确调用AsyncCompletedEventHandler(在这种情况下为OnDownloadFileCompleted )。 问题 :当调用WebClient.CancelAsync ,文件继续下载,并且不会立即调用OnDownloadFileCompleted 。 WebClient似乎要等到下载完成后再调用处理程序。 但是,在这两种情况下,都正确设置了AsyncCompletedEventArgs.Canceled属性(例如,如果确实调用了WebClient.CancelAsync ,则为true 。 我错过了什么吗? 是否有更好/更智能的模式来处理WebAPI中的多个下载? 任何帮助将非常感谢! DownloadController.cs [Route (“api/download”)] public class DownloadController { private readonly DownloadService service; public DownloadController (DownloadService service) { this.service = service; } [Route (“start”)] [HttpPost] public string Start ([FromForm] string fileUrl) => this.service.StartDownload (fileUrl); […]

通过Web客户端post方法C#传递两个JSON对象

我需要在C#中使用Web客户端方法将下面的对象作为post方法的参数传递。 { “company”: { “id”: “e63dfcab345260b2591f585126ede56627db4ef2” }, “requestor”: { “id”: “”, “email”: “customer@example.com “, “firstName”: “Test”, “lastName”: “Requestor”, “role”: “employerAdmin”, “phone”: “(415)1112222”, “title”: “HR Manager” } } 我这样转换了 company[id]=e63dfcab345260b2591f585126ede56627db4ef2&requestor[id]=&requestor[email]=customer@example.com+&requestor[firstName]=Test&requestor[lastName]=Requestor&requestor[role]=employerAdmin&requestor[phone]=(415)1112222&requestor[title]=HR+Manager 但我得到无效的参数错误。 请帮我。 提前致谢。 我的整个代码如下: using (var Requestor = new System.Net.WebClient()) { string url = “https://stormaas-pre.inflection.com:8443/v1/Requestor?”; string parameters = “company[id]=’757563a3-67df-4a6e-9ef9-d89d57d41e0d’&requestor[id]=”&requestor[email]=’customer@example.com’&requestor[firstName]=’Test’&requestor[lastName]=’Requestor’&requestor[role]=’employerAdmin’&requestor[phone]='(415)1112222’&requestor[title]=’HRManager'”; Requestor.Headers.Add(“user-agent”, “Mozilla/4.0 (compatible; MSIE 6.0; Windows NT […]

使用WebClient下载多个文件时无限循环

概念:我正在制作一个从给定URL下载文件的C#应用​​程序。 文本框,url添加,文件下载,每个事件都以正确的方式发生。 我正在尝试重新创建此程序以逐个下载多个文件。 我有一个带有一个url / line的文本框,解析正确,我在字符串数组中放置了所有链接,放在文本框中。 然后它开始下载异步,我想让它一个接一个地下载,所以我在foreach循环中进行了一个while循环,因为我不想在下一个url之前直到当前的下载完成。 问题是:我进入一个无限循环(虽然我之前做了这个工作(idk如何),如果我在while循环中放置了一个消息框(注意:我在一分钟前重试过,这次没有做到这一点) )。 我只是展示代码片段: foreach (string url in urllist) { isdonwloaded = false; string filename = url.Split(‘/’).Last(); label3.Text = filename; webclient.DownloadFileAsync(new Uri(url), @”C:\Users\Krisz” + @”\” + filename); while (!isdonwloaded) // this was the first idea, but with webclient.IsBusy it did the same thing { // MessageBox.Show(counter); Thread.Sleep(1000); label8.Text = […]

WebClient下载字符串(几个字符页面)太慢了

我正在尝试从URL下载字符串。 不幸的是,它很慢。 这是我的代码: // One of these types for two bad solutions anyway // byte[] result = new byte[12]; // string result; using (var webClient = new System.Net.WebClient()) { String url = “http://bg2.cba.pl/realmIP.txt”; //result = webClient.DownloadString(url); // slow as hell //webClient.OpenRead(url).Read(result, 0, 12); // even slower } 这需要大约4-5秒,这对我来说似乎非常不合适…… 该url的内容为IP XX.YYY.ZZ.FF

如何使用HttpClient在单个请求上设置HttpHeader

我有一个跨多个线程共享的HttpClient : public static class Connection { public static HttpClient Client { get; } static Connection() { Client = new HttpClient { BaseAddress = new Uri(Config.APIUri) }; Client.DefaultRequestHeaders.Add(“Connection”, “Keep-Alive”); Client.DefaultRequestHeaders.Add(“Keep-Alive”, “timeout=600”); Client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue(“application/json”)); } } 它有一些我放在每个请求上的默认标头。 但是,当我使用它时,我想为该请求添加标题: var client = Connection.Client; StringContent httpContent = new StringContent(myQueueItem, Encoding.UTF8, “application/json”); httpContent.Headers.Add(“Authorization”, “Bearer ” + accessToken); // <– […]

WebClient:忽略HTTP 500

我正在编写一个程序,它从服务器检索一些数据,对它执行一些操作,并将输出保存到csv文件。 我遇到的问题是服务器(我不负责)总是返回HTTP 500内部服务器错误。 我跟那个照顾它的团队说过话,虽然他们知道这个bug,但他们说这对他们来说并没有足够的影响力来解决。 有没有办法让我在代码中忽略这个响应并仍然获取数据?

使用WebClient时的System.Net.WebException:无法创建SSL / TLS安全通道

当我执行以下代码时 System.Net.ServicePointManager.ServerCertificateValidationCallback = (sender, certificate, chain, errors) => { return true; }; var webClient = new WebClient(); var s = webClient.DownloadString(“https://jtlplugins.x-volution.de/api.php?apikey=yS5VS7OiG1ukiIqLzCSYuFCjeF1qSskKOQeCtVxh&do=pruefe_app&cappid=123&chardwareid=DC0D-BFEA-6F79-58DE-21E9-BA3A-B288-C46F&clizenzschluessel=123”); 我总是得到一个System.Net.WebException:无法创建SSL / TLS安全通道 当我执行这个 https://jtlplugins.x-volution.de/api.php?apikey=yS5VS7OiG1ukiIqLzCSYuFCjeF1qSskKOQeCtVxh&do=pruefe_app&cappid=123&chardwareid=DC0D-BFEA-6F79-58DE-21E9-BA3A-B288-C46F&clizenzschluessel=123 例如,直接在Firefox或Internet Explorer中,它可以工作并返回结果。 我应该怎么做,这也是我的代码在浏览器中执行的? 我已经阅读了stackoverflow中有关此问题的其他post – 但他们没有解决我的问题:-(

从Google趋势下载.csv文件

我希望从我通过代码创建的url下载Google趋势数据。 当这些URL放入浏览器(我使用firefox)时会显示一个保存提示,我可以选择在查看浏览器时打开或保存文件。 但是,我希望通过代码包含Google趋势数据的相同.csv文件,我被困住了。 这是我的代码创建的链接之一:[提示下载,但是是谷歌] https://www.google.com/trends/trendsReport?hl=en-US&q=debt&geo=US&date=now%207-d&cmpt=q&content=1&export=1 我有这个链接的两个问题,它要么下载带有中文字符的.csv文件(我相信已损坏?),要么下载一些HTML(如下所示)。 当HTML保存为HTML文件并运行时,它会将我带到Google趋势主页,其中包含看似无用的URL: https://www.google.com/trends/#geo=US&date=now+7-d&cmpt=q&q=debt&hl=en-US&content=1 Redirecting // Accessing window.external members can cause IE to throw exceptions. // Any code that acesses window.external members must be try/catch wrapped /** @preserveTry */ try { if (top == self) { if (window.gtbExternal) { window.gtbExternal.setM(); } else { window.external.setM(); } } } catch(err) { } location.replace(“http://www.google.com/trends#geo\x3dUS\x26date\x3dnow+7-d\x26cmpt\x3dq\x26q\x3ddebt\x26hl\x3den-US\x26content\x3d1”) […]

WebClient异步下载文件时检测连接丢失(在C#中)

我正在使用WebClient的DownloadFileAsync(在C#中)方法异步下载文件。 我有事件处理程序附加到DownloadProgressChanged和DownloadFileCompleted事件。 我希望通过DownloadFileCompleted事件处理程序中的AsyncCompletedEventArgs的Error属性通知任何错误。 如果在下载开始之前没有连接,它可以很好地工作。 它出现了正确的错误,我在上面提到的属性中得到了错误。 但是如果在下载过程中连接断开,则不会发生任何事情。 事件处理程序未被调用,它会一直等待。 我该怎么办才能处理这种情况? 谢谢。