2009-10-31 42 views
1

我正在做一些HttpWebRequest的试验,并且需要让它使用SSL。它可以在一些网站上工作(例如PayPal),但不是我真正想要的工作,例如this社区网站(URL也在代码示例中)。为什么是这样?这些证书(我假设这是问题的症结所在)看起来很糟糕。HttpWebRequest SSL只能在某些网站上工作

public static bool AcceptAllCertificatePolicy(object sender, 
              X509Certificate certificate, 
              X509Chain chain, 
              SslPolicyErrors sslPolicyErrors) 
    { 
     return true; 
    } 

    static void LoginTest() 
    { 

     ServicePointManager.ServerCertificateValidationCallback += AcceptAllCertificatePolicy; 

     HttpWebRequest req = (HttpWebRequest) 
     WebRequest.Create("https://steamcommunity.com"); 

     req.Method = "GET"; 

     req.CookieContainer = new CookieContainer(); 

     HttpWebResponse resp = (HttpWebResponse)req.GetResponse(); 

     Console.WriteLine("Cookies:" + resp.Cookies.Count + "\r\n" + resp.ResponseUri); 
     Console.WriteLine(resp.Headers); 

     resp.Close(); 
    } 

感谢

编辑:URL是不正确的,对不起。问题依然存在。

编辑2: 我忘了提及,虽然它不给我任何错误,它也不返回任何cookie。这就是我真正的追求。 www.paypal.com给我7块饼干,响应头是

Pragma: no-cache 
Cache-Control: private 
Date: Sat, 31 Oct 2009 12:10:29 GMT 
Expires: Thu, 05 Jan 1995 22:00:00 GMT 
Set-Cookie: LANG=sv_SE%3bSE; expires=Tue, 29-Oct-2019 12:10:30 GMT; domain=.paypal.com; path=/,cookie_check=yes; expires=Tue, 29-Oct-2019 12:10:30 GMT; domain=.paypal.com; path=/,navcmd=_home-general; domain=.paypal.com; path=/,consumer_display=USER_HOMEPAGE%3d0%26USER_TARGETPAGE%3d0%26USER_FILTER_CHOICE%3d7%26BALANCE_MODULE_STATE%3d1%26GIFT_BALANCE_MODULE_STATE%3d1%26LAST_SELECTED_ALIAS_ID%3d0; expires=Sun, 31-Oct-2010 12:10:30 GMT; domain=.paypal.com; path=/,cwrClyrK4LoCV1fydGbAxiNL6iG=_Yi2Io2xQuP5-kmjAhh1KUJVMH6VTFfnf1Zlw1ONf41yAAUyLXUiLZ_9GJcPZmmNMl6kgpaG14eNnVA6jYlkyaK7h2IPqoPUsUobSg-gzEf4NsHrbwWzuCe8W50EIPW4ABaAkG%7c3EWGI8_elkol97q63exWWZMOA02gaDHo4_Y_7lKC_xHE2kWR8DZGXAmqs4uv075KRh6OW0%7ctJQpXroB_JJPd9EvK7Xx17DfiF9lz5vs06ThWWluWxwM3-WO82KChgIGdC080wwm5Q6vL0%7c1256991030; domain=.paypal.com; path=/,navlns=0.0; expires=Fri, 26-Oct-2029 12:10:30 GMT; domain=.paypal.com; path=/,Apache=10.190.11.252.1256991029926042; path=/; expires=Fri, 18-Sep-03 05:42:13 GMT 
Server: Apache 
Vary: Accept-Encoding 
Strict-Transport-Security: max-age=500 
Transfer-Encoding: chunked 
Content-Type: text/html; charset=UTF-8 

而steamcommunity.com在0饼干结果被设置,

Pragma: no-cache 
Connection: close 
Transfer-Encoding: chunked 
Cache-Control: no-cache 
Content-Type: text/html; charset=UTF-8 
Date: Sat, 31 Oct 2009 12:14:25 GMT 
Expires: Mon, 26 Jul 1997 05:00:00 GMT 
Server: Apache 

即使它应该至少设置一个。

回答

1

为Firefox安装Firebug的。清除您的Cookie缓存,然后导航到该网站。检查萤火虫以查看浏览器发送的确切请求是什么。然后使用代码复制完全相同的请求。这意味着复制浏览器发送的所有标题。

如果某些服务器不认为它是发出请求的浏览器,它们将不会发送cookie。所以,把所有的请求标题放在网站上就好像浏览器正在请求页面一样。

+0

这个伎俩。 谢谢你们。 – pastapockets

0

问题是证书不适用于https://www.steamcommunity.com,但对于https://steamcommunity.com。所以你所要做的就是改变你的网址:

WebRequest.Create("https://steamcommunity.com"); 

看看Issued to头。对于贝宝是Issued to: www.paypal.com,同时为您的网站是Issued to: steamcommunity.com


UPDATE:

new WebClient().DownloadString("https://steamcommunity.com"); // works 
new WebClient().DownloadString("https://www.steamcommunity.com"); // throws invalid certificate 
+0

这是一个错字,当我改变了网址,它似乎没有工作没有www。 – pastapockets

+0

那么,它为我工作,看到更新。 –

+0

对不起,我没有正确说明我原来的queston。现在更新了。 – pastapockets

相关问题