2013-06-08 2 views
1

이 코드를 사용하여 로그인하고 약 반년 동안 필요한 파일을 다운로드하면 이제 예외가 throw됩니다. '{0}'매개 변수는 빈 문자열 일 수 없습니다. 매개 변수 이름 : cookie.Domain, Google을 확인한 적이 있지만 인기있는 문제이지만 이유를 이해할 수 없습니까? 전에는 모든 것이 괜찮 았고 프로그램 코드는 변경하지 않았지만 난로 쿠키에서 무엇이 변경 될 수 있으므로 프로그램에서 지금 이해할 수 없습니까? 우리가 경우 여기를 cookie.Domain 매개 변수CookieAwareWebClient 인수가 0이 될 수 없음

   Cookie cookie = new Cookie(); //create cookie 
       this.CookieContainer.Add(cookie); 

을 가질 수있는 방법을

this.CookieContainer.Add(cookie); 

또한 라인

 CookieContainer cookies = new CookieContainer(); 
     CookieAwareWebClient http = new CookieAwareWebClient(cookies); 

     string sLogin = "name=_______&password=_______&dobav2_login=_______"; 
     http.Headers["Content-type"] = "application/x-www-form-urlencoded"; 
     http.Headers["User-Agent"] = "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/535.2 (KHTML, like Gecko) Chrome/15.0.874.121 Safari/535.2"; 

     string sResponse = http.UploadString("https://www.railwagonlocation.com/en/index.php", sLogin); 
     richTextBox1.Text = sResponse; 


     http.DownloadFile("https://www.railwagonlocation.com/export_excel.php?export_type=vagon_list&l=en", "D:\\my_excel.xlsx"); 

AwareClient

public class CookieAwareWebClient : WebClient 
    { 
    public CookieContainer CookieContainer { get; set; } 
    public Uri Uri { get; set; } 

    public CookieAwareWebClient() 
     : this(new CookieContainer()) 
    { 
    } 

    public CookieAwareWebClient(CookieContainer cookies) 
    { 
     this.CookieContainer = cookies; 
    } 

    protected override WebRequest GetWebRequest(Uri address) 
    { 
     WebRequest request = base.GetWebRequest(address); 
     if (request is HttpWebRequest) 
     { 
      (request as HttpWebRequest).CookieContainer = this.CookieContainer; 
     } 
     HttpWebRequest httpRequest = (HttpWebRequest)request; 
     httpRequest.AutomaticDecompression = DecompressionMethods.GZip | DecompressionMethods.Deflate; 
     return httpRequest; 
    } 

    protected override WebResponse GetWebResponse(WebRequest request) 
    { 
     WebResponse response = base.GetWebResponse(request); 
     String setCookieHeader = response.Headers[HttpResponseHeader.SetCookie]; 

     if (setCookieHeader != null) 
     { 
      //do something if needed to parse out the cookie. 
      if (setCookieHeader != null) 
      { 
       Cookie cookie = new Cookie(); //create cookie 
       this.CookieContainer.Add(cookie); 
      } 
     } 
     return response; 
    } 
} 

오류 우리 방금 만든 새 쿠키?

답변

1

글쎄, 빈 쿠키를 만드는 것뿐입니다. 도메인, 이름 또는 값을 설정하지 않았고 추가하려고하면 CookieContainer가 검사하는 것입니다. 따라서 한 가지 해결책은 해당 쿠키의 값을 설정하는 것입니다. 그러나 GetRequest 무시에서 Response를 가져 오는 Set-Cookie 헤더를 사용할 필요가 없으면 CookieContainer를 이미 참조 했으므로 CookieContainer에 이미 추가 된 쿠키가 있어야합니다.

관련 문제