繁体   English   中英

我该如何发出在代理和无代理情况下均可使用的ac#https Web请求

[英]How can I make a c# https web request that works in both proxy and no proxy situations

这段代码已经更改,修改和尝试,目前我的webrequest如图所示,其后是GetRequestStream()和GetResponse()部分。 这可以从我们的代理后面工作,但是可以从wifi上的笔记本电脑而不是代理后面工作 ,GetProxy位返回传递给它的uri,这将导致错误“ ServicePointManager不支持https方案的代理”。 因此,我尝试按以下方式将代理设置为与传递的uri匹配时为空白的新代理。 这导致该过程锁定了一段时间,然后返回“操作超时错误”。 如果我将Fiddler放在笔记本电脑上,则它可以充当代理,因此代码可以像在我们的网络中一样工作,并且一切正常,因此Fiddler可以更改代码的操作。

我认为关键可能在于引发GetTimeStream()的超时问题。

笔记本电脑在ie或chrome中没有代理设置。 通过浏览器,我可以毫无问题地访问http和https网站(包括我正在从此代码访问的网站)。

但是,从我的C#代码中,我无法使https请求正常工作。

如果我将请求更改为http,则可以正常运行。 (都是在我们的网络中,在代理后面以及在笔记本电脑上)

虽然下面显示了我拥有的当前代码,但我尝试替换在这里以及各种博客/指南中找到的任何代码块,但没有找到有效的解决方案。

需要明确的是,我在https和http上的代理后面的机器上都可以正常工作。 使用http时,我可以从非代理笔记本电脑上使用它。 尝试获得https连接时,非代理便携式计算机上会发生错误。

        HttpWebRequest myWebRequest;
        myWebRequest = (HttpWebRequest)HttpWebRequest.Create(url);
        myWebRequest.CookieContainer = new System.Net.CookieContainer();

        if (myWebRequest.Proxy.GetProxy(new Uri(url)).ToString() == url)
        {
            myWebRequest.Proxy = new WebProxy();
        }
        else
        {
            string proxyuri = myWebRequest.Proxy.GetProxy(new Uri(url)).ToString();
            myWebRequest.Proxy = new WebProxy(proxyuri, true);
            myWebRequest.Proxy.Credentials = System.Net.CredentialCache.DefaultCredentials;
        }
        myWebRequest.UseDefaultCredentials = true;

好的,所以我遇到的问题与服务器上apache中的设置有关。 解决方案在这里。

在Windows 7 / Vista下,SSL连接上的HttpWebRequest.GetRequestStream()会因超时而中断

基本上,您需要确保apache指令中的服务器名与c#的https地址向下匹配到www。 部分。

现在我想知道的是,在调用GetRequestStream()之前,c#代码中是否有一种方法可以避免或捕获此错误,该方法将冻结30秒钟,然后是超时异常。

我怎样才能更好地检测到这一点?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM