Приведите пример сохранение капчи (картинки) с помощью HttpWebRequest или же как-то по другому, но чтобы работало с https протоколом и прокси. Зарание спасибо!
Отправка капчи на распознавание через сервис anti-captcha.net БЕЗ СОХРАНЕНИЯ КАРТИНКИ В ФАЙЛ! Картинка берётся из URL и сразу отправляется на распознавание Code: public static string MultiFormData(string Key, string Value, string Boundary) { string output = "--" + Boundary + "\r\n"; output += "Content-Disposition: form-data; name=\"" + Key + "\"\r\n\r\n"; output += Value + "\r\n"; return output; } public static string MultiFormDataFile(string Key, string Value, string FileName, string FileType, string Boundary) { string output = "--" + Boundary + "\r\n"; output += "Content-Disposition: form-data; name=\"" + Key + "\"; filename=\"" + FileName + "\"\r\n"; output += "Content-Type: " + FileType + " \r\n\r\n"; output += Value + "\r\n"; return output; } public static System.Drawing.Imaging.ImageFormat DetectImageFormat(string fmt) { switch (fmt.ToLower()) { case "image/jpg": return System.Drawing.Imaging.ImageFormat.Jpeg; case "image/jpeg": return System.Drawing.Imaging.ImageFormat.Jpeg; case "image/gif": return System.Drawing.Imaging.ImageFormat.Gif; case "image/png": return System.Drawing.Imaging.ImageFormat.Png; case "image/bmp": return System.Drawing.Imaging.ImageFormat.Bmp; case "image/tiff": return System.Drawing.Imaging.ImageFormat.Jpeg; case "jpg": return System.Drawing.Imaging.ImageFormat.Jpeg; case "jpeg": return System.Drawing.Imaging.ImageFormat.Jpeg; case "gif": return System.Drawing.Imaging.ImageFormat.Gif; case "png": return System.Drawing.Imaging.ImageFormat.Png; case "bmp": return System.Drawing.Imaging.ImageFormat.Bmp; case "tiff": return System.Drawing.Imaging.ImageFormat.Jpeg; default: return null; } } public static byte[] imageToBytes(Image imageIn, System.Drawing.Imaging.ImageFormat imgFormat) { MemoryStream ms = new MemoryStream(); imageIn.Save(ms, imgFormat); return ms.ToArray(); } public string Upload(string url, string cap_ext, out long id) { id = -1; ua = browser("http://anti-captcha.net/in.aspx"); ua.Method = "POST"; ua.Timeout = 60000; ua.ReadWriteTimeout = 60000; string sBoundary = DateTime.Now.Ticks.ToString("x"); ua.ContentType = "multipart/form-data; boundary=" + sBoundary; string sPostMultiString = ""; sPostMultiString += MultiFormData("method", "post", sBoundary); sPostMultiString += MultiFormData("key", this.key, sBoundary); sPostMultiString += MultiFormData("softkey", "c06b73466", sBoundary); sPostMultiString += MultiFormData("file", url, sBoundary); sPostMultiString += MultiFormData("is_russian", "1", sBoundary); sPostMultiString += MultiFormData("phrase", "0", sBoundary); sPostMultiString += MultiFormData("regsense", "1", sBoundary); sPostMultiString += MultiFormData("numeric", "0", sBoundary); sPostMultiString += MultiFormData("calc", "0", sBoundary); sPostMultiString += MultiFormData("min_len", "4", sBoundary); sPostMultiString += MultiFormData("max_len", "30", sBoundary); string sFileContent = ""; HttpWebRequest req = (HttpWebRequest)WebRequest.Create(url); req.AllowAutoRedirect = true; req.Method = "GET"; //WebProxy myProxy = new WebProxy(""); //req.Proxy = myProxy; req.UserAgent = "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.04506.590; .NET CLR 3.5.20706)"; HttpWebResponse resp = (HttpWebResponse)req.GetResponse(); Stream stream = resp.GetResponseStream(); Image image = System.Drawing.Image.FromStream(stream); byte[] bi = imageToBytes(image, DetectImageFormat(cap_ext)); sFileContent = Encoding.Default.GetString(bi); stream.Close(); string filename = "captcha." + cap_ext; sPostMultiString += MultiFormDataFile("file", sFileContent, filename, "image/" + cap_ext, sBoundary); sPostMultiString += "--" + sBoundary + "--\r\n\r\n"; byte[] byteArray = Encoding.Default.GetBytes(sPostMultiString); ua.ContentLength = byteArray.Length; try { ua.GetRequestStream().Write(byteArray, 0, byteArray.Length); HttpWebResponse myHttpWebResponse = (HttpWebResponse)ua.GetResponse(); StreamReader myStreamReadermy = new StreamReader(myHttpWebResponse.GetResponseStream(), Encoding.GetEncoding(1251)); result_page = myStreamReadermy.ReadToEnd(); //result_headers = myHttpWebResponse.Headers.ToString(); string[] pars = result_page.Split(new char[1] { '|' }, StringSplitOptions.RemoveEmptyEntries); if (pars[0] == "OK") id = Convert.ToInt64(pars[1]); return result_page; } catch (WebException ex) { Console.WriteLine(ex.Message); return ""; } } public string get(long cap_id) { if (this.req("http://anti-captcha.net/res.aspx?key=" + key + "&action=get&id=" + cap_id + "&")) { try { string[] result = result_page.Split(new char[1] { '|' }); return result[1]; } catch { return result_page; } } return ""; } public string get_balance(string key) { if (this.req("http://anti-captcha.net/res.aspx?key=" + key + "&action=getbalance")) { return result_page; } return "-1"; } public bool reportbad(long cap_id) { if (this.req("http://anti-captcha.net/res.aspx?key=" + key + "&action=reportbad&id=" + cap_id)) { if (result_page.IndexOf("ERROR") >= 0) { return false; } return true; } return false; } private bool req(string url) { ua = browser(url); ua.Method = "GET"; ua.KeepAlive = true; try { HttpWebResponse myHttpWebResponse = (HttpWebResponse)ua.GetResponse(); StreamReader myStreamReadermy = new StreamReader(myHttpWebResponse.GetResponseStream(), Encoding.GetEncoding(1251)); result_page = myStreamReadermy.ReadToEnd(); result_headers = myHttpWebResponse.Headers.ToString(); return true; } catch (WebException ex) { //Console.WriteLine(ex); return false; } } Использование: Code: long capid = 0; string img_url = "http://vkontakte.ru/captcha.php?sid=" + sid + "&s=1"; string ans = Upload(img_url, "jpg", out capid); if (!ans.StartsWith("ERROR") && answer != "NO_DATA") { int tries = 0; DateTime capStarted = DateTime.Now; while (/*AppStarted && Started &&*/ ans != "" && capid > 0 && tries < 150 ) { tries++; System.TimeSpan diffResult = DateTime.Now.Subtract(capStarted); if (diffResult.Seconds > 60) { break; } ans = get(capid); if (ans == "CAPCHA_NOT_READY") Thread.Sleep(500); else break; } }