2013-07-17 134 views
0

我想從http://www.vatgia.com/home/security_code.php?0.6400910824330888下載圖像驗證碼,但驗證碼僅在我登錄時顯示。 我使用Web Client下載它,但我無法在下載時添加請求cookie登錄。從C#中的直接身份驗證鏈接下載圖像

System.Net.WebClient wc = new System.Net.WebClient(); 
    wc.Credentials = new System.Net.NetworkCredential("minhtrung3811", "Nguyen123");//Authenticates to the website - Call it only if the image url needs authentication first 
    wc.DownloadFile(url, "d:\\downloadedImage.jpg"); //Downloads the imageURL to the local file downloadedImage.jpg 

請幫幫我嗎?

我更新我的問題!

感謝@Joseph,我有

private void Post(string url) 
     { 
      using (client = new WebClientWithCookies()) 
      { 
       client.OpenReadCompleted += 
        new OpenReadCompletedEventHandler(client_OpenReadCompleted); 
       var uri = new Uri(url, UriKind.RelativeOrAbsolute); 
       client.Headers.Add("Cookie", _cookies); 
       client.OpenReadAsync(uri); 
      } 
     } 

和方法下載文件

public static int DownloadFile(String remoteFilename, 
           String localFilename) 
     { 
      // Function will return the number of bytes processed 
      // to the caller. Initialize to 0 here. 
      int bytesProcessed = 0; 

      // Assign values to these objects here so that they can 
      // be referenced in the finally block 
      Stream remoteStream = null; 
      Stream localStream = null; 
      WebResponse response = null; 

      // Use a try/catch/finally block as both the WebRequest and Stream 
      // classes throw exceptions upon error 
      try 
      { 
       // Create a request for the specified remote file name 
       WebRequest request = WebRequest.Create(remoteFilename); 
       if (request != null) 
       { 
        // Send the request to the server and retrieve the 
        // WebResponse object 
        response = request.GetResponse(); 
        if (response != null) 
        { 
         // Once the WebResponse object has been retrieved, 
         // get the stream object associated with the response's data 
         remoteStream = response.GetResponseStream(); 

         // Create the local file 
         localStream = File.Create(localFilename); 

         // Allocate a 1k buffer 
         byte[] buffer = new byte[1024]; 
         int bytesRead; 

         // Simple do/while loop to read from stream until 
         // no bytes are returned 
         do 
         { 
          // Read data (up to 1k) from the stream 
          bytesRead = remoteStream.Read(buffer, 0, buffer.Length); 

          // Write the data to the local file 
          localStream.Write(buffer, 0, bytesRead); 

          // Increment total bytes processed 
          bytesProcessed += bytesRead; 
         } while (bytesRead > 0); 
        } 
       } 
      } 
      catch (Exception e) 
      { 
       Console.WriteLine(e.Message); 
      } 
      finally 
      { 
       // Close the response and streams objects here 
       // to make sure they're closed even if an exception 
       // is thrown at some point 
       if (response != null) response.Close(); 
       if (remoteStream != null) remoteStream.Close(); 
       if (localStream != null) localStream.Close(); 
      } 

      // Return total bytes processed to caller. 
      return bytesProcessed; 
     } 

我下載的圖像文件。 ....

String url = "link image captcha code"; 
Post(url); 
Download_file(url, "D:\\IMAGE.PNG"); 

但我不能夠獲取圖像圖形驗證碼:(

+1

這並不容易。您需要對他們的登錄表單如何實現進行研究:需要發送哪些字段以及要保存哪些Cookie。 – zerkms

回答

1

一切取決於網站是否會解釋您的用戶名/密碼,當您在提供它你的HTTP請求請看這個帖子WebRequest and WebResponse

除非你有權訪問使用真實身份驗證的版本,否則你可能需要使用HttpWebRequest和假POST請求到站點,而你有一個CookieContainer,這樣你可以保留令牌那你就是abl e將該令牌包含在獲取請求中以下載圖像文件

+0

我已更新我的問題,請幫助我? –