Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 02.10.2015, 09:47   #1
Agnostik
 
Регистрация: 19.03.2013
Сообщений: 7
Стрелка Delphi (Indy + CapMonster + Antigate=Error)

Привет всем. Уже неделю вожусь с проблемой. Есть программа, работающая с антигейтом, уже годами все работало как часы, но вот я решил подключить свою программу к CapMonster'у, и по какой-то причине он просто отказывается обрабатывать картинки. Он их вроде как принимает, потому что на первой демке кончился лимит в 1к бесплатных капч, но в логе вообще не отображает картинки. В ответ же приходит "ERROR"(GET запрос капчи нормально обрабатывается, а Post нет)

Возможно, проблема в кодировке, в CapMonster используется 1251, но я не знаю точно какая в Delphi, а точнее в MultiPartFormData. Избавился от проблемы, что idhttp отключает протокол 1.1 и включает 1.0. Но это не помогло. Пробовал подключать StringStream. Но видимо что-то делаю не так.

Прикрепляю два файла, в первом Raw Stream от программы на C++, в которой все работает. Второй от моей программы.

Вот примерный исходник, просто их уже вариантов 10-15 было:
Код:
 MultiData:=Tidmultipartformdatastream.Create;
    MultiData.AddFile('file', 'captcha_mail.ru_1443552073360-759.jpg', 'image/jpeg');
    MultiData.AddFormField('method','post');
    MultiData.AddFormField('key', '593cdcc03cb415ab6ac571e68945ade5');
    MultiData.AddFormField('is_russian', IntToStr(0));
    MultiData.AddFormField('phrase', IntToStr(0));
    MultiData.AddFormField('regsense', IntToStr(1));
    MultiData.AddFormField('numeric', IntToStr(0));
    MultiData.AddFormField('min_len', IntToStr(0));
    MultiData.AddFormField('max_len', IntToStr(0));
    MultiData.AddFormField('soft_id','381');

    try
    ww:=true;
        while ww=true do
        begin
            try
            idHTTP3.Post('http://antigate.com/in.php',multidata);
              ss:=Copy(ss,4,maxint);
              ww:=False;
            except
            ww:=True;
            end;
        end;
    finally
    MultiData.Free;
    end;

    m:=true;
    while m=TRUE do
    begin
    sleep(5000);
    zz:=idHTTP3.Get('http://antigate.com/res.php?key=593cdcc03cb415ab6ac571e68945ade5&action=get&id='+ss);
       if zz[1]='O' then
        begin
        zz:=Copy(zz,4,Length(zz));
        m:=False;
        end;
    end;
Вложения
Тип файла: txt 111.txt (10.5 Кб, 124 просмотров)
Тип файла: txt 222.txt (11.0 Кб, 125 просмотров)
Agnostik вне форума Ответить с цитированием
Старый 04.10.2015, 23:30   #2
Agnostik
 
Регистрация: 19.03.2013
Сообщений: 7
По умолчанию Новости

Узнал, что проблема в том, что картинка кодируется в бинарный тип, как закодировать ее в Base64? Ну это я еще могу сделать, но не понимаю как правильно оформить запрос, чтоб прикрепить этот файлик в Base64
Agnostik вне форума Ответить с цитированием
Старый 05.10.2015, 00:14   #3
koljsch
Форумчанин
 
Регистрация: 26.01.2009
Сообщений: 360
По умолчанию

По поводу Base64:
http://www.cyberforum.ru/delphi-begi...ead359019.html
http://www.delphisources.ru/pages/fa...de_decode.html
В гугле куча примеров.
Насчет того как прикрепить, по идеи файлы отправляются по HTTP через кодирование в Base64 и в POST запрос.
Смотрите API.
koljsch вне форума Ответить с цитированием
Старый 05.10.2015, 00:54   #4
Agnostik
 
Регистрация: 19.03.2013
Сообщений: 7
По умолчанию

Спасибо за ответ. С base64 я разобрался(оказалось ошибку в запросе допустил и ходил вокруг нее), точнее как закодировать, даже через онлайн декодеры проверял, на выходе правильная картинка.
Но по-прежнему остается проблема с прикреплением файла. Пробовал записать кодированную строку в файл и его прикреплять в MultiPartFormDataStream через AddObject, антигейт такой способ устраивает, однако через сниффер вижу именно для Файла Content-Transfer-Encoding=binary. Мне же обязательно нужно base64.
Есть две мысли:
1) прикреплять по-другому (не знаю как)
2) использовать какой-нибудь StringStream ( тоже не знаю как в данном случае правильно)

Очень надеюсь на вашу помощь

upd. Еще забыл, нужно не только закодированную картинку передать, но и несколько параметров запроса
Agnostik вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
AntiGate + IdHTTP = ? greenisius C/C++ Сетевое программирование 3 17.11.2013 14:36
Ошибка socket error # 10051 network is unreachable в Indy IdSMTP remont_it, C++ Builder 0 21.01.2013 22:31
INDY + HTTPS + SSL = Socket Error #10061 yoshimidzo Работа с сетью в Delphi 12 10.01.2013 12:57
Antigate alex0097 Общие вопросы Delphi 3 18.09.2012 18:07
У меня borland developer studio delphi 2006 так вот как вставить на вкладку tool palette компоненты Indy Clients и Indy Misc Artem_host Общие вопросы Delphi 0 01.02.2012 09:55