我正在尝试保存每次请求动态动态的图片。
我尝试了WatIn和HttpWebRequest
(获取新图片)
HttpWebRequest request = (HttpWebRequest)WebRequest.Create("www.test.com");
request.AllowAutoRedirect = false;
WebResponse response = request.GetResponse();
using (Stream stream = response.GetResponseStream())
using (FileStream fs = File.OpenWrite(ImageCodePath))
{
byte[] bytes = new byte[1024];
int count;
while ((count = stream.Read(bytes, 0, bytes.Length)) != 0)
{
fs.Write(bytes, 0, count);
}
}
和(User32.dll)URLDownloadToFile(获取新图片)
[DllImport("urlmon.dll", CharSet = CharSet.Auto, SetLastError = true)]
static extern Int32 URLDownloadToFile(Int32 pCaller, string szURL, string szFileName, Int32 dwReserved, Int32 lpfnCB);
URLDownloadToFile(0, "https://test.reporterImages.php?MAIN_THEME=1", ImageCodePath, 0, 0);
我查看了所有临时文件夹但仍找不到图像。
Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.InternetCache),"Content.IE5");
每当我尝试保存它时,服务器都会构建一个新图像并将其返回。如果我右键单击图像并选择:
将图片另存为...
它会保存图片。我需要以某种方式在IE中的WatIn中实现此方法(右键单击,将图片另存为...),或以某种方式从我的HTML页面使用HttpRequest
下载它而无需服务器交互。
有谁知道我该怎么做?
答案 0 :(得分:2)
据我了解,我的想法是在浏览器页面上捕获当前的CAPTCHA图像以通过一些文本识别来绕过它(顺便说一句,奇怪的想法)。获取图像网址没有问题(它总是一样的)。在这种情况下,您可以使用API访问浏览器缓存。 专门针对IE FindFirstUrlCacheEntry / FindNextUrlCacheEntry 如果您的应用程序托管WebBrowser,它可以提供帮助。
答案 1 :(得分:0)
使用WebClient
:
using (var client = new WebClient())
{
client.DownloadFile("http://cdn.sstatic.net/stackoverflow/img/sprites.png?v=3c6263c3453b", "so-sprites.png");
}
如果您提供包含html
的{{1}}页面的网址,而不是直接发布到图像,则仍可以使用连续两次请求的网络客户端。首先是从页面源中删除图像URL(如果url是静态的,则不需要),然后实际下载图像。
编辑:
对不起。从一开始就不清楚。因此,您在应用中托管浏览器,并在其中看到实际图像。您想要下载您正在看到的图像。当然,提出另一个请求不会起作用,因为会生成另一个图像。
解决方案取决于您使用的网络浏览器控件
对于img
(System.Windows.Forms),您可以使用WebBrowser
。见这里的例子: