我想从http://www.vatgia.com/home/security_code.php?0.6400910824330888下载图片验证码,但只有登录时才会显示验证码。 我使用Web Client下载它,但是我无法在下载时添加请求cookie登录。
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");
但是我无法获得图像验证码:(
答案 0 :(得分:1)
全部取决于在您的HTTP请求中提供时,网站是否会解释您的用户名/密码。请仔细阅读WebRequest and WebResponse。
除非您有权访问使用真实身份验证的版本,否则您可能需要在拥有CookieContainer时使用HttpWebRequest和伪造的POST请求,以便您可以保留令牌。然后,您就可以在get请求中包含该令牌以下载图像文件