2012-12-27 5 views
1

c를 내가 다음 코드를 사용하여 가져 오기 요청을 만드는 중이라서에서 다음과 같이이 후의 HttpWebRequest #

  TheRequest = (HttpWebRequest)WebRequest.Create(aURL); 
      TheRequest.Method   = "GET"; 
      TheRequest.CookieContainer = TheCookies; 
    TheRequest.UserAgent   = GetUserAgent(); 
    TheRequest.KeepAlive   = false; 
    TheRequest.Timeout  = 20000; 
      TheRequest.ReadWriteTimeout = 20000; 
    TheRequest.AllowAutoRedirect = true; 
    TheRequest.Headers.Add("Accept-Language", "en-us"); 
      TheResponse = (HttpWebResponse)TheRequest.GetResponse(); 
      TheResponseString = new StreamReader(TheResponse.GetResponseStream(), Encoding.ASCII).ReadToEnd(); 

을 나는 쿠키를 가지고 :

string theCookieHeader = TheResponse.Headers[HttpResponseHeader.SetCookie]; 

그럼 내가 적절한 쿠키 형식으로 문자열을 처리 다음 POST 요청에서 그것을 제공하기 위해 쿠키 컨테이너에 넣으십시오. 응답 문자열 (TheResponseString)에서 적절한 Post 데이터와 cookiecontainer의 쿠키를 만듭니다.

다음과 같이 POST 요청에 대한 내 코드입니다 : 당신이 다음 아무것도 의심하는 경우

    TheRequest = (HttpWebRequest)WebRequest.Create(aURL); 
        TheRequest.Method   = "POST"; 
        TheRequest.CookieContainer = TheCookies; 
      TheRequest.UserAgent  = GetUserAgent(); 
      TheRequest.KeepAlive  = false;   
        TheRequest.Timeout    = 20000; 
        TheRequest.ReadWriteTimeout = 20000; 
      TheRequest.AllowAutoRedirect = true; 
      TheRequest.ContentType  = "application/x-www-form-urlencoded"; 
      TheRequest.Headers.Add("Accept-Language", "en-us"); 
        byte[] bytes = Encoding.ASCII.GetBytes(aPostDataString); 
      TheRequest.ContentLength = bytes.Length; 
      Stream oStreamOut = TheRequest.GetRequestStream(); 
      oStreamOut.Write(bytes,0,bytes.Length); 
      oStreamOut.Close(); 

        TheResponse = (HttpWebResponse)TheRequest.GetResponse(); 

        TheResponseString = new StreamReader(TheResponse.GetResponseStream(),       Encoding.ASCII).ReadToEnd(); 

이제 문제는 나는 그들이 같은 모든 일을 가지고, 그들은 파트너 웹 사이트입니다, 두 개의 웹 사이트를 가지고있다 (그것은 보이지만하십시오 나에게 말해라.) 그러나 하나의 웹 사이트에 대해 그것은 잘 작동하고 다른 하나는 웹 사이트 오류 페이지의 응답 문자열을 제공한다.

문제 진단에 대한 도움을주십시오.

+0

두 번째 쿠키에 다른 쿠키를 제공해야합니다. 같은 웹 사이트이지만 다른 하위 도메인 인 경우에도 때때로 다른 쿠키를 제공해야합니다. –

+4

오류가 발생하는 경우 사이트에서 로그를 살펴 봐야합니다. 왜 * 오류가 발생하는지. –

+0

@JonSkeet 난 그가 접근 할 수없는 웹 사이트에 연결하려고하는 것 같아, 리 요청에 대해 btw :) 나는 SkeetNotifier를 설치했다, 너무 귀엽다! –

답변

0

비슷한 문제가있었습니다. 요청에서 쿠키를 저장하려고하면 응답을받은 후이 코드를 finally 블록에 넣으십시오. TheRequest.Host 및 두 번째 사이트에 대한 두 번째 사이트의 호스트에 대해 한 번 실행하십시오. 또한 http 또는 https가 필요한지 확인하십시오.

foreach (Cookie c in TheRequest.CookieContainer.GetCookies(new Uri("http://" + TheRequest.Host))) 
{ 
    TheCookies.SetCookies(new Uri("http://" + TheRequest.Host), c.Name + "=" + c.Value); 
} 
+0

이유는 모르겠지만 TheRequest.CookieContainer.GetCookies (새 Uri ("http : //"+ TheRequest.Host))는 쿠키를 반환하지 않습니다. – user1871770

+0

@ user1871770 https가 아니라 http일까요? 피 들러 요청을 따르려고 했습니까? – VladL

+0

예, 제 질문과 같이 2 단계로 진행되었습니다. 코드를 어디에 넣을 지 말해 주시겠습니까? 말씀하신 내용을 시도해주십시오. 클래스 컨테이너로 쿠키를 사용하고 있습니다. – user1871770