Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: проблемка с соксами при idhttp запросах  (Прочитано 35489 раз)
0 Пользователей и 7 Гостей смотрят эту тему.
maloy_ya
Участник

ua
Offline Offline
Пол: Мужской

« : 28-09-2010 13:29 » 

доброго времени суток вам!!вот нынче занят написанием прожки, без проски все проходит на ура а вот при подключении прокси получаеться крепкая ботва!!
подключал прокси вот так:

Код:
fs:TmemoryStream;
compressor:tIdCompressorZLibEx;
stack:tidIOHandlerStack;
sock:tidsocksinfo;
begin
proxyadr :='221.231.139.5:1080';
idhttp1.ReadTimeout := 30000;
idhttp1.ConnectTimeout := 10000;
idhttp1.Request.UserAgent := 'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0)';
//idhttp1.Request.AcceptEncoding := 'gzip,deflate';
sock := tidsocksinfo.create (idhttp1);
sock.authentication := sanoauthentication;
sock.version := svsocks5;
sock.host := copy (proxyadr, 1, pos (':', proxyadr) - 1);
sock.port := strtoint (copy (proxyadr, pos (':', proxyadr) + 1, 5));
stack := tidIOHandlerStack.Create (idhttp1);
stack.TransparentProxy := sock;
idhttp1.IOHandler := stack;
compressor := tIdCompressorZLibEx.Create (idhttp1);
idhttp1.Compressor := compressor;
fs:=TmemoryStream.Create;
da:=TStringList.Create;
da.Add('Login='+e1.Text);
da.Add('Domain='+e2.Text);
da.Add('Password='+e3.Text);
s:=idHTTP1.Post('http://win.mail.ru/cgi-bin/auth',da);


и далее еще кучазапросов.

Но при первом же пост запросе он отправляет:
login
domain
password
domain
password
domain
password
и точно так же в последующих запросах он мне отправляет:
login, domain хотя их там в помине не должно быть!!
Подскажите пожалуйста в чем беда??
З.Ы. делфи7 инди 10.0.52

Добавлено в 2010-09-29, 18:32:54:
неужели ни у кого не было такого??
Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #1 : 29-09-2010 15:31 » 

maloy_ya, а слабо под отладчиком посмотреть детально то, что отправляешь ? Улыбаюсь

И это не есть программа, это есть каша (овсянная). Такая же каша и в голове, возможно. Надо привести в порядок - и всё заработает
« Последнее редактирование: 29-09-2010 15:33 от Алексей1153++ » Записан

maloy_ya
Участник

ua
Offline Offline
Пол: Мужской

« Ответ #2 : 30-09-2010 09:18 » 

это кусок как ты назвал каши, а в частности отправка первого пост запроса и если же там что то лишнее или чего то не хватает так подскажите а не умничайте пожалуйста!!!
Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #3 : 30-09-2010 09:27 » 

точно не хватает форматирования и комментариев Улыбаюсь А дельфи я не знаю
Записан

maloy_ya
Участник

ua
Offline Offline
Пол: Мужской

« Ответ #4 : 30-09-2010 12:08 » 

ну дружище это на самом деле не самое главное самое главное что оно работает криво!!а не могу понять почему??
Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #5 : 30-09-2010 12:56 » 

криво выглядит - криво работает. Это почти закон
Записан

maloy_ya
Участник

ua
Offline Offline
Пол: Мужской

« Ответ #6 : 30-09-2010 19:25 » 

но не аксиома же!!!
Записан
Sla
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #7 : 01-10-2010 06:07 » 

Алексей1153++, там и форматировать ничего не надо, нет условных переходов и циклов, нет блоков требующих begin-end

идти надо отсюда
Цитата
Но при первом же пост запросе он отправляет:
login
domain
password
domain
password
domain
password
и точно так же в последующих запросах он мне отправляет:
login, domain хотя их там в помине не должно быть!!


s:=idHTTP1.Post('http://win.mail.ru/cgi-bin/auth',da);

Что в da?
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
maloy_ya
Участник

ua
Offline Offline
Пол: Мужской

« Ответ #8 : 02-10-2010 16:20 » 

эээ...так там по коду можно было догадаться, но вот:
da:=TStringList.Create;
da.Add('Login='+e1.Text);//в эдит1 логин
da.Add('Domain='+e2.Text);//в эдит2 домен
da.Add('Password='+e3.Text);//в эдит 3 пароль
s:=idHTTP1.Post('http://win.mail.ru/cgi-bin/auth',da);
или тебя именно интересует какой лонин, какой пароль и какой домен??Улыбаюсь
Записан
Sla
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #9 : 03-10-2010 11:42 » 

maloy_ya, по коду понятно,
Что в отладчике?
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
maloy_ya
Участник

ua
Offline Offline
Пол: Мужской

« Ответ #10 : 04-10-2010 12:22 » 

эээ...ну ошибок нету все нормально пашет!!!или о каком отладчике идет речь??
Записан
Sla
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #11 : 04-10-2010 12:47 » 

а может ты не там задаешь параметры   прокси?
я так понимаю, что есть у компонента idHTTP, свойства типа proxyseкrver и proxyport, proxyuser и proxypassword.
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
maloy_ya
Участник

ua
Offline Offline
Пол: Мужской

« Ответ #12 : 04-10-2010 13:31 » 

да вы правы есть такие свойства, но скорее всего мне прийдеться использовать не один прокси а несколько так как они иногда бывают не доступны так что мне нужно все это прописывать в теле программы, дабы избежать постоянного ручного ввода проски!!есть еще одна вещь колторую я подметил в моей проге существует функция которая вызывается в теле программы, там тоже есть использование компонента tidhttp так вот там пост запрос он отправляет вполне адекватно!!вот такой прикол!!никаких соображений по этому поводу??

Добавлено в 2010-10-05, 04:15:46:
и туда же вопрос это может быть из-за инди??
Записан
Sla
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #13 : 05-10-2010 06:07 » 

да вы правы есть такие свойства, но скорее всего мне прийдеться использовать не один прокси а несколько так как они иногда бывают не доступны так что мне нужно все это прописывать в теле программы, дабы избежать постоянного ручного ввода проски!!есть еще одна вещь колторую я подметил в моей проге существует функция которая вызывается в теле программы, там тоже есть использование компонента tidhttp так вот там пост запрос он отправляет вполне адекватно!!вот такой прикол!!никаких соображений по этому поводу??
1. Почему в ручную?
Получаешь список проксей с параметрами, а затем по какому-то тебе известному алгоритму меняешь (или в ручную, или программно)
2. Пойди туда, не знаю куда.
У меня есть...
Так смотри в чем отличие, ведь ты ее сам писал..
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
maloy_ya
Участник

ua
Offline Offline
Пол: Мужской

« Ответ #14 : 07-10-2010 01:15 » 

всем спасибо за помощь раму собрал в чем проблема!!проблема оказалась в общедоступных проксях когда заюзал адекватные прокси все пропало само собой!вот тока теперь в другом беда, дабы отсеевать прокси который на данный момент не работает написал тест прокси!!все хорошо но при тесте выпадают ошибки типа:





вот код теста:

Код:
function new_socks : string;
var
  s, proxyadr : string;
  http : Tidhttp;
  coo : Tidcookiemanager;
  compressor : tIdCompressorZLibex;
  sock : tidsocksinfo;
  stack : tidIOHandlerStack;
begin
  result := 'false';
  while result = 'false' do
  begin
    http := Tidhttp.Create;
    //coo := Tidcookiemanager.Create (http);
    proxyadr := proxys.strings [random (proxys.Count - 1)];
    //proxyadr:='221.231.139.5:1080';
    http.ReadTimeout := 10000;
    http.ConnectTimeout := 10000;
    http.AllowCookies := true;
    http.HandleRedirects := false;
    http.CookieManager := coo;
    sock := tidsocksinfo.create (http);
    sock.authentication := sanoauthentication;
    sock.version := svsocks5;
    sock.host := copy (proxyadr, 1, pos (':', proxyadr) - 1);
    sock.port := strtoint (copy (proxyadr, pos (':', proxyadr) + 1, 5));
    stack := tidIOHandlerStack.Create (http);
    stack.TransparentProxy := sock;
    http.IOHandler := stack;
    compressor := tIdCompressorZLibEx.Create(http);
    http.Compressor := compressor;
      to_log ('test proxy - ' + proxyadr);
      s := http.get ('http://love.mail.ru/tips/?tip=Login');
      if pos('s_post',s) <> 0 then result := proxyadr;
    http.Free;
  end;
end;

подскажите пожалуйста их можно обработать или обойти??
Записан
zubr
Гость
« Ответ #15 : 07-10-2010 08:03 » 

maloy_ya, ну так внимательно читай сообщения дебагера. "1080' - is not integer value.
По крайней мере в коде sock.port := strtoint (copy (proxyadr, pos (':', proxyadr) + 1, 5)); - ошибка.
Записан
maloy_ya
Участник

ua
Offline Offline
Пол: Мужской

« Ответ #16 : 07-10-2010 09:40 » 

возможно но какая??взять стандартные прокси которые выглядят вот так:

76.25.90.191:56859
96.252.82.18:1028
123.124.173.39:1080

вы сможете сказать где в этой строчке ошибка??
Записан
Sla
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #17 : 07-10-2010 09:49 » 

а что говорит отладчик?

ты вырезаешь 5 символов из строки.
а 1080 - четыре, а что в конце строки?
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
maloy_ya
Участник

ua
Offline Offline
Пол: Мужской

« Ответ #18 : 07-10-2010 10:04 » 

без понятия!!мне кажеться что ничего так как делал так не раз и лишнего ничего не было.но он ругаеться и на 5-ти значный порт тоже!!скажи те пожалуйста у кого нить есть стабильная инди из разряда 10.5.5 так как на 10.6.... все адекватно работает но кукименеджер куки не забирает!!
Записан
zubr
Гость
« Ответ #19 : 07-10-2010 10:18 » 

maloy_ya, ты хоть слышишь что тебе говорят. Тебе отладчик прямым текстом прислал сообщение, перевожу - в функцию strtoint подставляется значение не соответствующее типу Integer, а именно - 1080' (а теперь внимательно, для тех кто в танке, обратим внимание на последний символ под названием одинарная кавычка).
Записан
maloy_ya
Участник

ua
Offline Offline
Пол: Мужской

« Ответ #20 : 07-10-2010 10:48 » 

Ага спасибо увидел! Нужно придумать как распознать сколько символ после ":" и парсить по кол-ву символов!!а как быть с другими ошибками??не подскажете как их можно обработать??
Записан
zubr
Гость
« Ответ #21 : 07-10-2010 13:29 » 

Остальные ошибки, судя по всему (с сокетами предпочитаю работать напрямую используя API) - это исключения инициализируемые самим инди-компонентом Tidhttp, поэтому их надо просто перехватывать и обрабатывать в блоке try except. Чтобы они не выскакивали в отладчике - отключить в отладчике опцию Stop on Delphi Exception.
Записан
maloy_ya
Участник

ua
Offline Offline
Пол: Мужской

« Ответ #22 : 08-10-2010 13:16 » 

Спасибо что ткнули носом в мои ошибки! с первой ошибкой расправилсо вот так sock.port := strtoint(TrimRight (copy (proxyadr, pos (':', proxyadr) + 1, 5))); а по поводу остальных ошибок нету ли какой нибудь статейки как перехватывать и обрабатывать ошибки потому что в гугле инфа на столько расплывчатая что ужас!буду рад разнообразной инфе или примерам обработки!!
Записан
zubr
Гость
« Ответ #23 : 08-10-2010 17:16 » 

Про конструкции try...finally, try...except, try...except...else думаю в любом учебнике по Delphi можно найти. Собственно - это азы. Прежде чем начинать что то программировать, имхо, надо все таки изучить азы языка. В качестве учебника могу посоветовать книгу Пачеко К. "Delphi5. Руководство разработчика" в 2-х частях. Книга несколько устаревшая, но полезная. В инете есть в электронном виде.
Записан
RXL
Технический
Администратор

Offline Offline
Пол: Мужской

WWW
« Ответ #24 : 08-10-2010 17:33 » 

https://club.shelek.ru/viewfiles.php?id=14
Возможно это оно.

Да, это оно.
« Последнее редактирование: 08-10-2010 17:34 от RXL » Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
maloy_ya
Участник

ua
Offline Offline
Пол: Мужской

« Ответ #25 : 09-10-2010 00:19 » 

всем огромное спасибо за помощь все разрулил при помощи try except!!оч полезная штука можно много проблем решать!!прога отличнейшим образом работает!!большое спасибо!!

З.Ы. ежели здесь можно как либо голосовать за вас дабы подымать рейтинги то расскажите как я с превеликим удовольствием помимо моего спасибо помогу повысить рейтинги!!
Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #26 : 09-10-2010 05:23 » new

maloy_ya, можешь добровольное пожертвование клубу кинуть ))
Записан

maloy_ya
Участник

ua
Offline Offline
Пол: Мужской

« Ответ #27 : 09-10-2010 15:06 » 

)))юююесли деньгой разживусь кину!!а пока увы...могу ток спасибом отделаться((
Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines