/// <summary> /// Загрузить файл капчи /// </summary> /// <param name="fileName">уть к файлу с капчей</param> /// <returns></returns> public string UploadCaptchaFile(string fileName) { var captchaconfig = new CaptchaConfig(); captchaconfig.SetLanguage(CaptchaLanguageEnum.English); return(UploadCaptchaFile(fileName, captchaconfig)); }
/// <summary> /// Загрузить файл капчи /// </summary> /// <param name="fileUrl">Путь к файлу с капчей</param> /// <param name="config">Параметры</param> /// <returns></returns> public async Task <string> UploadCaptchaFile(Uri fileUrl, CaptchaConfig config = null) { using (var webClient = new WebClient()) { byte[] imageBytes = await webClient.DownloadDataTaskAsync(fileUrl); return(await UploadCaptchaFile(Guid.NewGuid().ToString().Replace("-", ""), imageBytes, config)); } }
/// <summary> /// Загрузить файл капчи /// </summary> /// <param name="fileName">Путь к файлу с капчей</param> /// <param name="config">Параметры</param> /// <returns></returns> public async Task <string> UploadCaptchaFile(string fileName, CaptchaConfig config = null) { byte[] imageBytes; using (FileStream fileStream = new FileStream(fileName, FileMode.Open, FileAccess.Read)) { imageBytes = new byte[fileStream.Length]; await fileStream.ReadAsync(imageBytes, 0, (int)fileStream.Length); } return(await UploadCaptchaFile(fileName, imageBytes, config)); }
private void WriteKeys(Stream requestStream, CaptchaConfig config, byte[] boundarybytes) { string formdataTemplate = "Content-Disposition: form-data; name=\"{0}\"\r\n\r\n{1}"; NameValueCollection nvc = new NameValueCollection { { "key", _apiKey } }; if (config != null) { nvc.Add(config.GetParameters()); } foreach (string key in nvc.Keys) { requestStream.Write(boundarybytes, 0, boundarybytes.Length); string formitem = string.Format(formdataTemplate, key, nvc[key]); byte[] formitembytes = Encoding.UTF8.GetBytes(formitem); requestStream.Write(formitembytes, 0, formitembytes.Length); } requestStream.Write(boundarybytes, 0, boundarybytes.Length); }
/// <summary> /// Загрузить файл капчи /// </summary> /// <param name="fileName">уть к файлу с капчей</param> /// <param name="config">Параметры</param> /// <returns></returns> public string UploadCaptchaFile(string fileName, CaptchaConfig config) { string url = string.Format("{0}/in.php", host); NameValueCollection nvc = new NameValueCollection(); nvc.Add("key", api_key); if (config != null) { nvc.Add(config.GetParameters()); } string boundary = "---------------------------" + DateTime.Now.Ticks.ToString("x"); byte[] boundarybytes = System.Text.Encoding.ASCII.GetBytes("\r\n--" + boundary + "\r\n"); HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url); request.ContentType = "multipart/form-data; boundary=" + boundary; request.Method = "POST"; request.KeepAlive = true; request.Credentials = System.Net.CredentialCache.DefaultCredentials; Stream requestStream = request.GetRequestStream(); string formdataTemplate = "Content-Disposition: form-data; name=\"{0}\"\r\n\r\n{1}"; foreach (string key in nvc.Keys) { requestStream.Write(boundarybytes, 0, boundarybytes.Length); string formitem = string.Format(formdataTemplate, key, nvc[key]); byte[] formitembytes = System.Text.Encoding.UTF8.GetBytes(formitem); requestStream.Write(formitembytes, 0, formitembytes.Length); } requestStream.Write(boundarybytes, 0, boundarybytes.Length); string headerTemplate = "Content-Disposition: form-data; name=\"{0}\"; filename=\"{1}\"\r\nContent-Type: {2}\r\n\r\n"; string header = string.Format(headerTemplate, "file", fileName, "image/jpeg"); byte[] headerbytes = System.Text.Encoding.UTF8.GetBytes(header); requestStream.Write(headerbytes, 0, headerbytes.Length); FileStream fileStream = new FileStream(fileName, FileMode.Open, FileAccess.Read); byte[] buffer = new byte[4096]; int bytesRead = 0; while ((bytesRead = fileStream.Read(buffer, 0, buffer.Length)) != 0) { requestStream.Write(buffer, 0, bytesRead); } fileStream.Close(); byte[] trailer = System.Text.Encoding.ASCII.GetBytes("\r\n--" + boundary + "--\r\n"); requestStream.Write(trailer, 0, trailer.Length); requestStream.Close(); using (WebResponse response = request.GetResponse()) { Stream responseStream = response.GetResponseStream(); StreamReader responseReader = new StreamReader(responseStream); return(ParseAnswer(responseReader.ReadToEnd())); } }
public async Task <string> SolveCapthca(Uri fileUrl, TimeSpan?timeout = null, CaptchaConfig config = null) { TimeSpan timeSpan = timeout ?? TimeSpan.FromSeconds(60); var captchaId = await UploadCaptchaFile(fileUrl, config); var startTime = DateTime.UtcNow; while (true) { await Task.Delay(3000); try { return(await GetCaptcha(captchaId)); } catch (Exception e) { if (startTime.Add(timeSpan) < DateTime.UtcNow) { throw; } } } }
private async Task <string> UploadCaptchaFile(string fileName, byte[] imageBytes, CaptchaConfig config) { string url = $"{Host}/in.php"; string boundary = "---------------------------" + DateTime.Now.Ticks.ToString("x"); byte[] boundarybytes = Encoding.ASCII.GetBytes("\r\n--" + boundary + "\r\n"); HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url); request.ContentType = "multipart/form-data; boundary=" + boundary; request.Method = "POST"; request.KeepAlive = true; request.Credentials = CredentialCache.DefaultCredentials; using (Stream requestStream = request.GetRequestStream()) { WriteKeys(requestStream, config, boundarybytes); WriteHeader(requestStream, fileName); requestStream.Write(imageBytes, 0, imageBytes.Length); byte[] trailer = Encoding.ASCII.GetBytes("\r\n--" + boundary + "--\r\n"); requestStream.Write(trailer, 0, trailer.Length); } using (WebResponse response = await request.GetResponseAsync()) { Stream responseStream = response.GetResponseStream(); StreamReader responseReader = new StreamReader(responseStream); return(ParseAnswer(await responseReader.ReadToEndAsync())); } }