Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Сети > Indy Socket error #0


Автор: N0m 24.6.2010, 18:44
Всем привет!
При выполнении пост запроса возникает ошибка Indy Socket error #0
indy 10.5.5 Delphi 7
помогите решить проблему. спасибо за внимание
сразу говорю, что вариант кода черновой!
Код


  function Security(html:string):TStringList;
  var
    i:Integer;
    sDsh,sVal,sSp:string;
  begin
    result := TStringList.Create;
    result.Clear;

    sDsh:='<input type="hidden" name="dsh" id="dsh"';
    sVal:='value="';
    sSp:='" />';

    i := AnsiPos( sDsh , html );
    Delete(html,1,i+length(sDsh)-1);
    i := AnsiPos( sVal , html );
    Delete(html,1,i+length(sVal)-1);
    i := AnsiPos( sSp , html );
    Result.Add(Copy(html,0,i-1));
    i := AnsiPos( sVal , html );
    Delete(html,1,i+length(sVal)-1);
    i := AnsiPos( sSp , html );
    Result.Add(Copy(html,0,i-1));
  end;

procedure TForm1.Button1Click(Sender: TObject);
var
  html:String;
  stream: tStream;
  strings1,str2,st3: tStringList;

begin
  stream := tMemoryStream.Create;
  IdHTTP1.Get('https://www.google.com/accounts/ServiceLogin',stream);
  stream.Position := 0;
  strings1 := tStringList.Create;
  strings1.LoadFromStream(stream);
  memo1.Lines.Assign(strings1);
  strings1.Free;
  stream.Free;
  str2:=TStringList.Create;
  st3:=TStringList.Create;
  st3:=Security(memo1.Text);
  str2.Add('dsh='+st3.Strings[0]);
  str2.Add('GALX='+st3.Strings[1]);
  str2.Add('Email=Логин');
  str2.Add('Passwd=Пасс');
  str2.Add('rmShown=1');
  str2.Add('signIn=Войти');
  str2.Add('asts=');
  IdHTTP1.Post('https://www.google.com/accounts/ServiceLogin',str2);//тут возникает ошибка(((
  st3.Free;
  str2.free;
end;

снифером смотрел то, что браузер отправляет и сделал тоже самое на делфи, но что то не особо хочет работать(((

dsh            2693799974267024753 //парсю
GALX    s95tf2AugOE //парсю
Email    ЛОГИН
Passwd    Пароль
rmShown    1
signIn    Войти
asts    

Автор: mistrmax 25.6.2010, 15:55
https - протокол использующий SSL шифрование. Нужно кинуть на форму компонент IdSSLIOHandlerSocket который находится на вкладке Indy i\o handlers , а в свойстве IOHandler компонента IDHTTP1 указать   IdSSLIOHandlerSocket1 . По неизвестным причинам компоненты вместе всё равно работают неправильно, поэтому нужно отправлять данные два раза (вот накопал у себя в проектах):
Код

var
sl:TStringlist;
begin
sl:=TStringList.create;
 try
  sl.text:=idhttp1.Get('https://www.icq.com/register/index.php');
  except
  try
  sl.text:=idhttp1.Get('https://www.icq.com/register/index.php');
  except
ShowMessage('Ошибка !' );
  end;
end;
end;

А ! И ещё у компонента IdSSLIOHandlerSocket1 в свойстве Method укажи sslvTLSv1, а также засунь в корень папки где лежит проект и в C:\windows\system32 библиотеки из архива. smile 

Автор: N0m 25.6.2010, 17:48
mistrmax это уже сделано. не получается авторизироваться на сайте!

Автор: mistrmax 25.6.2010, 19:21
N0m, что значит неполучается ? не проходит авторизация ? или всё таже ошибка #0 попробуй то что написано в этой теме http://forum.vingrad.ru/forum/topic-301884/kw-idhttp-get-bigmir-net-пустота.html (Matematik)

Автор: N0m 25.6.2010, 19:36
да все я путем сделал только вот не хочет авторизироваться))

Автор: mistrmax 25.6.2010, 19:38
но ведь должно  smile ((( фигня какаято

Автор: N0m 25.6.2010, 21:44
 smile нашел компонент с исходниками для работы с гуглом на базе wininet  smile 
https://code.google.com/p/delphicelendar/downloads/detail?name=GoogleLogin_component.zip&can=2&q=

Цитата

но ведь должно  ((( фигня какаято

ssl мистика или просто еще нет достаточного опыта

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)