如何制作在代理和无代理情况下均可使用的c#https Web请求

时间:2014-11-06 15:02:48

标签: c# https proxy httpwebrequest

此代码已更改并已黑客入侵并尝试过,我目前正在显示我的webrequest,然后是GetRequestStream()和GetResponse()部分。这可以从我们的代理后面但是从wifi上的笔记本电脑不在代理后面 GetProxy位返回传递给它的uri,这导致错误" ServicePointManager不支持代理https计划。"所以我尝试如下将代理设置为与传递的uri相匹配的空白新代理。这导致进程锁定一段时间然后返回"操作超时错误"。如果我把Fiddler放在笔记本电脑上它就可以充当代理,所以代码就像我们的网络一样工作,一切都很好,所以fiddler改变了代码的操作。

我认为密钥可能是在GetRequestStream()期间它会引发超时的超时问题。

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

但是从我的c#代码中我无法使用https请求。

如果我将请求更改为http,则可以正常工作。 (在代理和笔记本电脑后面的网络上)

虽然下面显示了我已经获得的当前代码,但我已尝试使用我在此处找到的代码块以及各种博客/指南进行交换,但未找到可行的解决方案。< / p>

为了清楚起见,我在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;

1 个答案:

答案 0 :(得分:0)

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

HttpWebRequest.GetRequestStream() breaks by timeout on SSL connection under Windows 7/Vista

基本上,您需要确保apache指令中的servername与c#的https地址匹配到www。部分。

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

我怎样才能更好地发现这一点?