Пожалуйста, проверьте на ошибки C# код

vaulroon

Client
Регистрация
20.10.2017
Сообщения
274
Благодарностей
11
Баллы
18
Крч, искал, как капчу в base64 перевести без сохранения ее в виде файла на диске.
Нашел где-то на форуме вот этот кусок:
Код:
string imageUrl = @"http://15procentov.ru/kcaptcha/";
byte[] imageBytes;
HttpWebRequest imageRequest = (HttpWebRequest)WebRequest.Create(imageUrl);
WebResponse imageResponse = imageRequest.GetResponse();
Stream responseStream = imageResponse.GetResponseStream();
using (BinaryReader br = new BinaryReader(responseStream))
            {
                imageBytes = br.ReadBytes(500000);
                br.Close();
            }
            responseStream.Close();
            imageResponse.Close();
var base64 = Convert.ToBase64String(imageBytes);
Но тут понятно, что при запросе капчи куки не передает, прокси не использует. Начал гуглить дальше, почитал пару статеек типа этой и этой, и на основании выше приведенного кода я слепил своего монстра. При попытке запуска, получаю ошибку:

Кто разбирается в C#, подскажите, пожалуйста, в чем ошибка (где-то в ссылке на капчу, как я понял, но в чем конкретно - не понятно). И вообще, не напихал ли я в него невпихуемового, если напихал, поправьте, позязя. =]

Код:
string CaptchaUrl = @"https://swa.mail.ru/c/6"; // Ссылка на капчу
var Proxy = project.Variables["CurrentProxy"].Value; // Задаем прокси из переменной CurrentProxy
byte[] ImageBytes; // Тут создаем массив байт, ага?
IWebProxy proxyObject = new WebProxy(Proxy, true); // Устанавливаем
math.Proxy = proxyObject;                            // прокси
request.CookieContainer = new CookieContainer(); // Создаем контейнейр для кук, че бы это не значило
request.CookieContainer.Add(new Uri(CaptchaUrl),            // Задаем куки
                new Cookie("CookieName", "CookieValue"),    // CookieName=CookieValue
                new Cookie("CookieName2", "CookieValue2"));    // и CookieName2=CookieValue2
HttpWebRequest CaptchaRequest = (HttpWebRequest)WebRequest.Create(CaptchaUrl); // Отправляем запрос на ссылочку с ранее заданными куками с использованием прокси
CaptchaRequest.UserAgent = @"mobmail android 6.4.0.23593 ru.mail.mailapp"; // Задаем юзерагент
WebResponse CaptchaResponse = CaptchaRequest.GetResponse(); // Получаем ответ
Stream ResponseStream = CaptchaResponse.GetResponseStream(); // Переводим в двоичный код
using (BinaryReader br = new BinaryReader(ResponseStream)) // Тут творится какая-то неведомая хрень
            {
                ImageBytes = br.ReadBytes(500000);
                br.Close();
            }
            ResponseStream.Close();
            CaptchaResponse.Close();
var base64 = Convert.ToBase64String(ImageBytes); // Получили капчу в base64, осталось отправить на распознание.
 
Последнее редактирование:

Radzhab

Client
Регистрация
23.05.2014
Сообщения
1 500
Благодарностей
1 268
Баллы
113
Первое что увидел - project.Variables["CurrentProxy"].Value ненадо брать в кавычки
C#:
string CaptchaUrl = @"https://swa.mail.ru/c/6"; \\ Ссылка на капчу
var Proxy = project.Variables["CurrentProxy"].Value; \\ Задаем прокси из переменной CurrentProxy
byte[] ImageBytes; \\ Тут создаем массив байт, ага?
IWebProxy proxyObject = new WebProxy(Proxy, true); \\ Устанавливаем
math.Proxy = proxyObject;                            \\ прокси
request.CookieContainer = new CookieContainer(); \\ Создаем контейнейр для кук, че бы это не значило
request.CookieContainer.Add(new Uri(CaptchaUrl),            \\ Задаем куки
                new Cookie("CookieName", "CookieValue"),    \\ CookieName=CookieValue
                new Cookie("CookieName2", "CookieValue2"));    \\ и CookieName2=CookieValue2
HttpWebRequest CaptchaRequest = (HttpWebRequest)WebRequest.Create(CaptchaUrl); \\ Отправляем запрос на ссылочку с ранее заданными куками с использованием прокси
WebResponse CaptchaResponse = CaptchaRequest.GetResponse(); \\ Получаем ответ
Stream ResponseStream = CaptchaResponse.GetResponseStream(); \\ Переводим в двоичный код
using (BinaryReader br = new BinaryReader(ResponseStream)) \\ Тут творится какая-то неведомая хрень
            {
                ImageBytes = br.ReadBytes(500000);
                br.Close();
            };
            ResponseStream.Close();
            CaptchaResponse.Close();
var base64 = Convert.ToBase64String(ImageBytes); \\ Получили капчу в base64, осталось отправить на распознание.
 

Sergodjan

Administrator
Команда форума
Регистрация
05.09.2012
Сообщения
20 407
Благодарностей
9 115
Баллы
113
Крч, искал, как капчу в base64 перевести без сохранения ее в виде файла на диске.
Нашел где-то на форуме вот этот кусок:
Код:
string imageUrl = @"http://15procentov.ru/kcaptcha/";
byte[] imageBytes;
HttpWebRequest imageRequest = (HttpWebRequest)WebRequest.Create(imageUrl);
WebResponse imageResponse = imageRequest.GetResponse();
Stream responseStream = imageResponse.GetResponseStream();
using (BinaryReader br = new BinaryReader(responseStream))
            {
                imageBytes = br.ReadBytes(500000);
                br.Close();
            }
            responseStream.Close();
            imageResponse.Close();
var base64 = Convert.ToBase64String(imageBytes);
Но тут понятно, что при запросе капчи куки не передает, прокси не использует. Начал гуглить дальше, почитал пару статеек типа этой и этой, и на основании выше приведенного кода я слепил своего монстра. При попытке запуска, получаю ошибку:

Кто разбирается в C#, подскажите, пожалуйста, в чем ошибка (где-то в ссылке на капчу, как я понял, но в чем конкретно - не понятно). И вообще, не напихал ли я в него невпихуемового, если напихал, поправьте, позязя. =]

Код:
string CaptchaUrl = @"https://swa.mail.ru/c/6"; \\ Ссылка на капчу
var Proxy = @"project.Variables["CurrentProxy"].Value"; \\ Задаем прокси из переменной CurrentProxy
byte[] ImageBytes; \\ Тут создаем массив байт, ага?
IWebProxy proxyObject = new WebProxy(Proxy, true); \\ Устанавливаем
math.Proxy = proxyObject;                            \\ прокси
request.CookieContainer = new CookieContainer(); \\ Создаем контейнейр для кук, че бы это не значило
request.CookieContainer.Add(new Uri(CaptchaUrl),            \\ Задаем куки
                new Cookie("CookieName", "CookieValue"),    \\ CookieName=CookieValue
                new Cookie("CookieName2", "CookieValue2"));    \\ и CookieName2=CookieValue2
HttpWebRequest CaptchaRequest = (HttpWebRequest)WebRequest.Create(CaptchaUrl); \\ Отправляем запрос на ссылочку с ранее заданными куками с использованием прокси
WebResponse CaptchaResponse = CaptchaRequest.GetResponse(); \\ Получаем ответ
Stream ResponseStream = CaptchaResponse.GetResponseStream(); \\ Переводим в двоичный код
using (BinaryReader br = new BinaryReader(ResponseStream)) \\ Тут творится какая-то неведомая хрень
            {
                ImageBytes = br.ReadBytes(500000);
                br.Close();
            }
            ResponseStream.Close();
            CaptchaResponse.Close();
var base64 = Convert.ToBase64String(ImageBytes); \\ Получили капчу в base64, осталось отправить на распознание.
как минимум, в примечаниях слеши не в ту сторону.. :-)
может быть в новой версии это уже не ошибка, но у меня на 5.11.7.0 выбивает ошибку про непредусмотренный символ если слеши не в ту сторону..
 

vaulroon

Client
Регистрация
20.10.2017
Сообщения
274
Благодарностей
11
Баллы
18
Упс, забыл еще юзерагент задать. Я там в код добавил лишнюю строчку.
 

vaulroon

Client
Регистрация
20.10.2017
Сообщения
274
Благодарностей
11
Баллы
18

vaulroon

Client
Регистрация
20.10.2017
Сообщения
274
Благодарностей
11
Баллы
18
Кстати, лет 10+ назад пробовал учить c#, че-то такое припоминается... А можно ли вообще локальные переменные писать с большой буквы? Типа string CaptchaUrl или правильнее будет string captchaUrl?
 

Санёк

Client
Регистрация
30.08.2013
Сообщения
325
Благодарностей
111
Баллы
43
Кстати, лет 10+ назад пробовал учить c#, че-то такое припоминается... А можно ли вообще локальные переменные писать с большой буквы? Типа string CaptchaUrl или правильнее будет string captchaUrl?
C# регистро-зависим, т.е. это будут две разные переменные.
 

vaulroon

Client
Регистрация
20.10.2017
Сообщения
274
Благодарностей
11
Баллы
18
Всякие какахи сыпятся в лог при попытке запустить даже оригинал. :(
 

kapelan28

Client
Регистрация
22.09.2015
Сообщения
469
Благодарностей
186
Баллы
43
Всякие какахи сыпятся в лог при попытке запустить даже оригинал. :(
правильно, что сыпятся - в коде присутствуют переменные, которые не объявлялись, потому и ошибки. В логе же ясно пишет, какие переменные нужно объявить.
 

vaulroon

Client
Регистрация
20.10.2017
Сообщения
274
Благодарностей
11
Баллы
18
правильно, что сыпятся - в коде присутствуют переменные, которые не объявлялись, потому и ошибки. В логе же ясно пишет, какие переменные нужно объявить.
Я не умею >_>
 

vaulroon

Client
Регистрация
20.10.2017
Сообщения
274
Благодарностей
11
Баллы
18
правильно, что сыпятся - в коде присутствуют переменные, которые не объявлялись, потому и ошибки. В логе же ясно пишет, какие переменные нужно объявить.
string CaptchaUrl;
var Proxy;
Вот это впихать в начало кода, да?
А еще что?

PS:
Компиляция кода Ошибка в действии "CS0818" "Неявно типизированные локальные переменные должны инициализироваться". [Строка: 1; Cтолбец: 5]

хэлп ми плиз
 

amyboose

Client
Регистрация
21.04.2016
Сообщения
2 312
Благодарностей
1 191
Баллы
113
 

vaulroon

Client
Регистрация
20.10.2017
Сообщения
274
Благодарностей
11
Баллы
18
ну емое, нужен сниппет для работы с капчей, уже неделю дрочусь с гуглом, единственные, что находит - это вариант с файлом. В c# не шарю.
Работа с капчей - это чуть ли не основная составляющая зп, а в контексте кампота - это вообще самая суть. а хэлпа по этому поводу вообще 0.
 

kapelan28

Client
Регистрация
22.09.2015
Сообщения
469
Благодарностей
186
Баллы
43
string CaptchaUrl = String.Empty; //Это если строковая переменная будет
string Proxy = String.Empty;
ну и так далее. Хотя в коде из первого поста складывается впечатление, что использовался код из Общего кода. А править/разбираться в чужом коде - дело неблагодарное...
 

kapelan28

Client
Регистрация
22.09.2015
Сообщения
469
Благодарностей
186
Баллы
43

vaulroon

Client
Регистрация
20.10.2017
Сообщения
274
Благодарностей
11
Баллы
18
если надо Рекапчу 2 побороть (если речь про Гугл - то скорее всего именно ее), то тут другой код надо использовать
нет, мне для обычной капчи надо, с гуглом я дрочу в плане поиска инфы, как запилить сниппет.
 

amyboose

Client
Регистрация
21.04.2016
Сообщения
2 312
Благодарностей
1 191
Баллы
113
Код:
string imageUrl = @"http://15procentov.ru/kcaptcha/";
HttpWebRequest req = (HttpWebRequest)WebRequest.Create(imageUrl);

using (WebResponse imageResponse = req.GetResponse())
using (Stream respStream = imageResponse.GetResponseStream())
using (MemoryStream ms = new MemoryStream())
{
       respStream.CopyTo(ms);
       var base64 = Convert.ToBase64String(ms.ToArray());
}
 
  • Спасибо
Реакции: samsonnn

vaulroon

Client
Регистрация
20.10.2017
Сообщения
274
Благодарностей
11
Баллы
18
Код:
string imageUrl = @"http://15procentov.ru/kcaptcha/";
HttpWebRequest req = (HttpWebRequest)WebRequest.Create(imageUrl);

using (WebResponse imageResponse = req.GetResponse())
using (Stream respStream = imageResponse.GetResponseStream())
using (MemoryStream ms = new MemoryStream())
{
       respStream.CopyTo(ms);
       var base64 = Convert.ToBase64String(ms.ToArray());
}
 

Кто просматривает тему: (Всего: 2, Пользователи: 0, Гости: 2)