Antichat снова доступен.
Форум Antichat (Античат) возвращается и снова открыт для пользователей.
Здесь обсуждаются безопасность, программирование, технологии и многое другое.
Сообщество снова собирается вместе.
Новый адрес: forum.antichat.xyz
 |
Рабочий код C# для antigate или captchabot. |

21.01.2010, 22:11
|
|
Новичок
Регистрация: 21.01.2010
Сообщений: 3
Провел на форуме: 8618
Репутация:
0
|
|
Рабочий код C# для antigate или captchabot.
Приветствую.
Хочу подключить к свой программе на C#
сервис по распознаванию каптч.
Столкнулся с трудностью:
Примеры кодов,представленные на сервисах, для подключения antigate и captchabot к программе не заработали.
Пытался сам написать, но уже какое время бьюсь ничего не вышло.
Если у кого есть рабочий вариант по подключению любого из сервисов к программе на C#
прошу поделиться. (пишу в VS2008)
Ну или подскажите, где можно почитать, как это можно сделать самому.
Заранее благодарен.
Готов стать рефом на любом из перечисленных сервисов.
|
|
|

21.01.2010, 22:47
|
|
Участник форума
Регистрация: 20.02.2009
Сообщений: 224
Провел на форуме: 5075819
Репутация:
274
|
|
Сам класс:
using System;
using System.Collections.Generic;
using System.Text;
using System.IO;
using System.Net;
using System.Web;
using System.Windows.Forms;
using System.Threading;
namespace LP
{
public class PostData5
{
private string s_method = String.Empty;
public string Method { get { return this.s_method; } }
private string s_action = String.Empty;
public string Action { get { return this.s_action; } }
public string Param { get { return this.s_param; } }
private string s_param = String.Empty;
public PostData5(string s_PostString)
{
if (s_PostString.IndexOf("=") != -1)
{
this.s_method = s_PostString.Substring(0, s_PostString.IndexOf("="));
this.s_action = s_PostString.Substring(s_PostString.IndexOf("=") + 1);
if (this.s_action.IndexOf("!") != -1)
{
this.s_action = s_action.Substring(0, this.s_action.IndexOf("!")); this.s_param = s_PostString.Substring(s_PostString.IndexOf("!") + 1);
}
}
}
public static string MultiFormData(string Key, string Value, string Boundary)
{
lock (typeof(PostData5))
{
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)
{
lock (typeof(PostData5))
{
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 class AntiCaptcha
{
public string captcha_id;
public string response_str;
public string GetText(string KapchaKey, string patch, int delay)
{
try
{
//Картинка содержится в теле ответа сервера myResp
//Запрос
HttpWebRequest myReq = (HttpWebRequest)HttpWebRequest.Create("http://antigate.com/in.php");
myReq.UserAgent = "Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.8.1.15) Gecko/20080623 Firefox/2.0.0.15 WebMoney Advisor";
myReq.Accept = "*/*";
myReq.Headers.Add("Accept-Language", "ru");
myReq.KeepAlive = true;
myReq.AllowAutoRedirect = false;
myReq.Method = "POST";
//пост параметры
string sBoundary = DateTime.Now.Ticks.ToString("x");
myReq.ContentType = "multipart/form-data; boundary=" + sBoundary;
string sPostMultiString = "";
sPostMultiString += PostData5.MultiFormData("method", "post", sBoundary);
sPostMultiString += PostData5.MultiFormData("key", KapchaKey, sBoundary);
sPostMultiString += PostData5.MultiFormData("file", Path.GetFileName(patch), sBoundary);
sPostMultiString += PostData5.MultiFormData("numeric", "1", sBoundary);//нулик для вконтакта)))
sPostMultiString += PostData5.MultiFormData("regsense", "0", sBoundary);//чувствителен к регистру!!!
string sFileContent = "";
Stream fStream = null;
fStream = File.OpenRead(patch);
int nread;
try
{
byte[] buffer = new byte[4096];
while ((nread = fStream.Read(buffer, 0, 4096)) != 0)
sFileContent += Encoding.Default.GetString(buffer);
fStream.Close();
}
catch (Exception exc)
{
MessageBox.Show(exc.Message);
}
sPostMultiString += PostData5.MultiFormDataFile("file", sFileContent, Path.GetFileName(patch), "image/pjpeg", sBoundary);
sPostMultiString += "--" + sBoundary + "--\r\n\r\n";
byte[] byteArray = Encoding.Default.GetBytes(sPostMultiString);
myReq.ContentLength = byteArray.Length;
myReq.GetRequestStream().Write(byteArray, 0, byteArray.Length);
string pg = "";
string s = "";
try
{
HttpWebResponse myResp = (HttpWebResponse)myReq.GetResponse();
StreamReader reader = new StreamReader(myResp.GetResponseStream(), Encoding.GetEncoding(1251));
pg = reader.ReadToEnd();
string[] pars = pg.Split(new char[1] { '|' }, StringSplitOptions.RemoveEmptyEntries);
captcha_id = pars[1];
s = pars[1];
}
catch (Exception exc)
{
if (pg == "ERROR_NO_SLOT_AVAILABLE")
return "ERROR_NO_SLOT_AVAILABLE";
}
//Надо добавить обработку ошибок
//Ждём распознавания капчи
try
{
for (int i = 0; i < 30; i++)
{
Thread.Sleep(delay);
HttpWebRequest myReq2 = (HttpWebRequest)HttpWebRequest.Create("http://antigate.com/res.php?key=" + KapchaKey + "&action=get&id=" + s);
myReq2.UserAgent = "Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.8.1.15) Gecko/20080623 Firefox/2.0.0.15 WebMoney Advisor";
myReq2.Accept = "*/*";
myReq2.Headers.Add("Accept-Language", "ru");
myReq2.KeepAlive = true;
myReq2.AllowAutoRedirect = false;
myReq2.Method = "GET";
HttpWebResponse ret2 = (HttpWebResponse)myReq2.GetResponse();
StreamReader reader = new System.IO.StreamReader(ret2.GetResponseStream(), Encoding.GetEncoding(1251));
pg = reader.ReadToEnd();
response_str = pg;
myReq2.Abort();
reader.Close();
ret2.Close();
myReq2 = null;
ret2 = null;
if (pg != "CAPCHA_NOT_READY")
{
string[] pars = pg.Split('|');
if (pars[0] == "OK")
{
return pars[1];
}
}
}
}
catch (Exception exc)
{
return exc.Message;
}
return "000000";
}
catch { return "000000"; }
}
public string FalseCaptcha(string KapchaKey)
{
string pg = "";
try
{
HttpWebRequest myReq = (HttpWebRequest)HttpWebRequest.Create("http://antigate.com/res.php?key=" + KapchaKey + "&action=reportbad&id=" + captcha_id);
myReq.UserAgent = "Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.8.1.15) Gecko/20080623 Firefox/2.0.0.15 WebMoney Advisor";
myReq.Accept = "*/*";
myReq.Headers.Add("Accept-Language", "ru");
myReq.KeepAlive = true;
myReq.AllowAutoRedirect = false;
myReq.Method = "GET";
HttpWebResponse ret = (HttpWebResponse)myReq.GetResponse();
StreamReader reader = new StreamReader(ret.GetResponseStream(), Encoding.GetEncoding(1251));
pg = reader.ReadToEnd();
myReq.Abort();
reader.Close();
ret.Close();
}
catch
{
FalseCaptcha(KapchaKey);
}
return pg;
}
}
}
Пример использования:
string check = String.Empty;
do
{
AntiCaptcha anticap = new AntiCaptcha();
check = anticap.GetText(FormState.anticaptcha, pic_name, 10000);
if (check == "ERROR_NO_SLOT_AVAILABLE")
{ }
lock (this) { this.Invoke(log_program, DateTime.Now + " = поток получил ответ: " + check + " на " + pic_name + "..."); }
Thread.Sleep(2000);
}
while ((check == "ERROR_NO_SLOT_AVAILABLE"));
r_ob.text_captcha = check;
По-моему, это тот же класс, что и на антикапче лежит...
зы.
sPostMultiString += PostData5.MultiFormData("numeric", "1", sBoundary);//нулик для вконтакта)))
sPostMultiString += PostData5.MultiFormData("regsense", "0", sBoundary);//чувствителен к регистру!!!
про это в faq почитай
|
|
|

22.01.2010, 21:23
|
|
Новичок
Регистрация: 21.01.2010
Сообщений: 3
Провел на форуме: 8618
Репутация:
0
|
|
Спасибо разобрался.
Не ожидал, что тут такая отзывчивая аудитория.
Спасибо.
|
|
|
|
 |
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
|
|