2009-10-31 2 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이 잘못했다, 미안 해요. 문제는 지속됩니다.

EDIT2 : 오류가 발생하지 않지만 쿠키를 반환하지 않는다는 것을 잊어 버렸습니다. 그게 내가 진짜 후인거야. www.paypal.com은 적어도 하나를 설정한다하더라도 응답 헤더 0 쿠키 결과가 설정되는 steamcommunity.com 동안

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 

,

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 

되는 날 7 개 쿠키를 제공한다.

답변

1

하는 파이어 폭스에 대한 불을 지르고 설치 : 귀하의 사이트가 Issued to: steamcommunity.com


UPDATE 동안 페이팔의 경우는, Issued to: www.paypal.com입니다. 쿠키 캐시를 지우고 사이트로 이동하십시오. 브라우저가 보낸 정확한 요청이 무엇인지 확인하려면 방화 켓을 확인하십시오. 그런 다음 코드를 사용하여 똑같은 요청을 복제하십시오. 이것은 브라우저가 보낸 모든 헤더를 복제하는 것을 의미합니다.

일부 서버는 요청을 보내는 브라우저라고 생각하지 않으면 쿠키를 보내지 않습니다. 따라서 모든 요청 헤더를 넣으면 마치 브라우저가 페이지를 요청하는 것처럼 사이트에 나타나야합니다.

+0

이것은 트릭을 만들었습니다. 감사합니다. – pastapockets

0

인증서가 https://www.steamcommunity.com은 아니지만 https://steamcommunity.com의 인증서는 유효하지 않습니다. 그래서 당신이해야 할 일은 귀하의 URL을 변경하는 것입니다 :

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

Issued to 헤더를보십시오.

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

URL을 변경했을 때 오타 였지만 www가 없으면 작동하지 않는 것 같습니다. – pastapockets

+0

글쎄, 그것은 나를 위해 일했다. 업데이트를 보아라. –

+0

죄송합니다, 나는 원래 queston을 제대로 진술하지 못했습니다. 지금 업데이트되었습니다. – pastapockets