[ Delphi / Pascal ] — начинающим: задаем вопросы (архивная - 2015)

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by banned, 6 May 2007.

Thread Status:
Not open for further replies.
  1. firstfallen

    firstfallen New Member

    Joined:
    1 Mar 2010
    Messages:
    64
    Likes Received:
    0
    Reputations:
    0
    спс, уже разобрался.
     
  2. patcher

    patcher Banned

    Joined:
    15 Dec 2009
    Messages:
    190
    Likes Received:
    37
    Reputations:
    10
    Code:
    uses ..., IdHTTP;
    ......
    var http:TIdHTTP; s:string;
    begin
    http := TIdHTTP.Create(Nil);
    s := http.Get('http://forum.antichat.ru');
    delete(s, 1, pos('<title>', s)+length('<title>')-1);
    s := copy(s, 1, pos('</', s)-1);
    ShowMessage(s);
    http.Free;
    end;
    Этот код выведет "Форум АНТИЧАТ - безопасность WEB - интерфейсов"

    П.С. сорри, если с ошибками, писал "на коленке"
     
  3. shadowrun

    shadowrun Banned

    Joined:
    29 Aug 2010
    Messages:
    842
    Likes Received:
    170
    Reputations:
    84
    PHP:
    Buff := 'GET / HTTP/1.1'#13#10+
                
    'host: vk.com'#13#10+
                
    'Connection: close'#13#10+
                #13#10;
       
    WSAStartup(MAKEWORD(20), inf);
       
    Server.s_addr := inet_addr(PChar('87.240.131.104'));
       
    sockaddr.sin_family := AF_INET;
       
    sockaddr.sin_port := htons(80);
       
    sockaddr.sin_addr := Server;
       
    socks:=socket(AF_INETSOCK_STREAMIPPROTO_TCP);
       
    connect(sockssockaddrsizeof(sockaddr));
       
    send(socksbufflength(buff), 0);
           
    repeat     FillChar(Buff2SizeOf(Buff2),0);
                
    d:=recv(socks,Buff2SizeOf(Buff2),0);
                    for 
    := 1 to d do write(Buff[i]);
           
    until d<=0;
       
    closesocket(socks);
       
    WSACleanup;
    При попытке коннекта на 80 порт выбивает i/o error 105. Что не так?
     
  4. alexey-m

    alexey-m Elder - Старейшина

    Joined:
    15 Jul 2009
    Messages:
    518
    Likes Received:
    100
    Reputations:
    37
    для начала хотя бы делай минимальную обработку ошибок:
    Code:
    function getIP(Host: PChar): PChar;
    var
      PHost: PHostEnt;
    begin
      PHost:= GetHostByName(Host);
      if (PHost = nil) then Result:= nil
        else Result:= inet_ntoa(PInAddr(PHost.h_addr_list^)^);
    end;
       
    var
      wsaData: TWSAData;
      hSocket: TSocket;
      SockAddrIn: TSockAddrIn;
    //  cURL: TCurl;
    const
      Port = 80;
      Host = 'vk.com';
    begin
      WSAStartup($0202, wsaData);
      
        hSocket:= WSASocket(AF_INET, SOCK_STREAM, 0, nil, 0, 0);
        if hSocket <> INVALID_SOCKET then try
    
          FillChar(SockAddrIn, SizeOf(SockAddrIn), 0);
          SockAddrIn.sin_family:= AF_INET;
          SockAddrIn.sin_port:= htons(Port);
          SockAddrIn.sin_addr.s_addr:= inet_addr(getIP(Host));
    
          if (WSAConnect(hSocket, @SockAddrIn, SizeOf(TSockAddr), nil, nil, nil, nil) = SOCKET_ERROR) then begin
              // Error connect
              .........
              Exit;
          end;
          .........
          send(hSocket, lpData^, cdLen, 0);
          .........
          recv(hSocket, lpData^, 8192, 0);
          .........
        finally
          closesocket(hSocket);
        end;
        WSACleanup;
    
     
  5. xophet

    xophet Member

    Joined:
    16 Apr 2011
    Messages:
    617
    Likes Received:
    49
    Reputations:
    5
    Попробуй не через IP, а через http://vk.com коннектиться, потому что 87.240.131.104 это IP http://vkontakte.ru
     
    1 person likes this.
  6. Ti Jock

    Ti Jock Member

    Joined:
    5 Apr 2010
    Messages:
    1
    Likes Received:
    6
    Reputations:
    3
    PHP:
    try
    app:=IdHTTP1.Get('http://vk.com/app'+edit3.text+'');
    except
    if Idhttp1.response.ResponseCode=404
    then
    Memo1
    .lines.Add ('Введите id приложения')
    else if 
    idHTTP1.ResponseCode=200 then begin
    Delete
    (app,1,pos('"auth_key":',app)+length('"auth_key":'));
    Delete(app,pos('",',app),length(app));
    Memo2.Lines.Add (app);
    end;
    При нажатии на кнопку ничего не происходит.
     
  7. patcher

    patcher Banned

    Joined:
    15 Dec 2009
    Messages:
    190
    Likes Received:
    37
    Reputations:
    10
    а почему ты ответ с кодом 200 ловишь в эесепшине? ответ от сервера с кодом 200 не вызывает у инди эксепшинов, так что правильно будет вот так:
    Code:
    try
    app:=IdHTTP1.Get('http://vk.com/app'+edit3.text+'');
    Delete(app,1,pos('"auth_key":',app)+length('"auth_key":'));
    Delete(app,pos('",',app),length(app));
    Memo2.Lines.Add (app);
    except
    if Idhttp1.response.ResponseCode=404
    then
    Memo1.lines.Add ('Введите id приложения')
    end;
    
     
  8. Ti Jock

    Ti Jock Member

    Joined:
    5 Apr 2010
    Messages:
    1
    Likes Received:
    6
    Reputations:
    3
    Это не так важно. Соль в том, что программа шлет запрос на http://vk.com/app, но оттуда не получает нужную информацию.
     
  9. patcher

    patcher Banned

    Joined:
    15 Dec 2009
    Messages:
    190
    Likes Received:
    37
    Reputations:
    10
    Это очень важно, так как если сервер отдает код 200 (ОК), то код заключенный в except end не будет выполняться, то есть парсинг auth_key и вывод его в Мемо выполняться не будет.
     
  10. Ti Jock

    Ti Jock Member

    Joined:
    5 Apr 2010
    Messages:
    1
    Likes Received:
    6
    Reputations:
    3
    Не знаю, этот код тоже не пашет. Нажимаю на кнопку и ничего не происходит.
     
  11. patcher

    patcher Banned

    Joined:
    15 Dec 2009
    Messages:
    190
    Likes Received:
    37
    Reputations:
    10
    авторизацию перед этим проходишь? куки получаешь/отправляешь?

    попробуй сразу с авторизацией:
    Code:
    var app, login, pass:string;
    cook : TIdCookieManager;
    begin
    login := '[email protected]'; //логин
    pass := 'pass'; //пасс
    idHTTP1.HandleRedirects := true;
    cook := TIdCookieManager.Create(IdHTTP1);
    IdHTTP1.CookieManager := cook;
     try
    idhttp1.Get('http://vkontakte.ru/login.php?email='+login+'&pass='+pass);
    app:=IdHTTP1.Get('http://vk.com/app'+'2434206'+'');
    except
    if Idhttp1.response.ResponseCode=404
    then
    Memo1.lines.Add ('Введите id приложения')
    else if idHTTP1.ResponseCode=200 then begin
    Delete(app,1,pos('"auth_key":',app)+length('"auth_key":'));
    Delete(app,pos('",',app),length(app));
    Memo1.Lines.Add (app);
    end;
    end;
    
     
    #9251 patcher, 24 Jul 2012
    Last edited: 24 Jul 2012
  12. shadowrun

    shadowrun Banned

    Joined:
    29 Aug 2010
    Messages:
    842
    Likes Received:
    170
    Reputations:
    84
    PHP:

    var LineString;

    procedure myThrd.FormAddLine;
    begin
      Form1
    .Caption := Line;
    end;

    function 
    myThrd.Authorize(Login,PasswordString): String;
     var   
    STTStringStream;
             
    HTTPTIdHTTP;
     
    begin
      HTTP 
    := TIdHTTP.Create(nil);
      
    HTTP.HandleRedirects := true;
      
    ST := TStringStream.Create('');
       try
         
    HTTP.Get('http://site1.com');
         
    HTTP.Get('http:site2.com',ST);
         
    Result := ST.DataString;
       finally
         
    ST.Free;
         
    HTTP.Free;
       
    end;
     
    end;


    procedure myThrd.Execute;
     var 
    PageString;
     
    begin
       Page 
    := Authorize('a-sarukhanova','kukushka');
          if 
    Pos('logout',Page) <> 0
           then
             Line 
    := 'good'
           
    else
             
    Line := 'bad';
       
    Synchronize(FormAddLine);
     
    end;
    Код потока.
    Не выполняется процедува FormAddLine. Без ф-ции Authorize все работает. Почему?
     
    #9252 shadowrun, 27 Jul 2012
    Last edited: 27 Jul 2012
  13. BigBear

    BigBear Escrow Service
    Staff Member Гарант - Escrow Service

    Joined:
    4 Dec 2008
    Messages:
    1,801
    Likes Received:
    920
    Reputations:
    862
    PHP:
    function myThrd.Authorize(Login,PasswordString): String
     var   
    STTStringList
             
    HTTPTIdHTTP
     
    begin 
      HTTP 
    := TIdHTTP.Create(nil); 
      
    HTTP.HandleRedirects := true
      
    ST := TStringList.Create
       try 
         
    HTTP.Get('http://site1.com'); 
         
    ST.Text:=HTTP.Get('http://site2.com'); 
         
    Result := ST.Text
      finally 
         
    ST.Free
         
    HTTP.Free
       
    end
     
    end;
    А так ?
     
    _________________________
    #9253 BigBear, 27 Jul 2012
    Last edited: 27 Jul 2012
  14. shadowrun

    shadowrun Banned

    Joined:
    29 Aug 2010
    Messages:
    842
    Likes Received:
    170
    Reputations:
    84
    Уже разобрался. Там на site2 https. Спасибо mironich ;)
     
  15. shadowrun

    shadowrun Banned

    Joined:
    29 Aug 2010
    Messages:
    842
    Likes Received:
    170
    Reputations:
    84
    Доброго времени.
    Стоит инди 10.5.8.0. Работаю с сайтами имеющими домен 3-го уровня. Куки менеджер напрочь отказывается передавать кукисы. Помню когда-то был фикс для модулей куки менеджера, но найти ничего не нашел. Вобщем если кто сталкивался и решил, просьба поделиться опытом.
     
  16. a.dimka

    a.dimka Member

    Joined:
    14 Dec 2011
    Messages:
    0
    Likes Received:
    10
    Reputations:
    3
    Подскажите как сделать чтобы файлы грузились из определенной папки по порядку и после проверки сохранялись с таким же названием в другую папку
     
  17. xophet

    xophet Member

    Joined:
    16 Apr 2011
    Messages:
    617
    Likes Received:
    49
    Reputations:
    5
    эм... ctrl+c - ctrl+v?
     
  18. a.dimka

    a.dimka Member

    Joined:
    14 Dec 2011
    Messages:
    0
    Likes Received:
    10
    Reputations:
    3
    Это надо реализовать в программе
     
  19. todaby

    todaby New Member

    Joined:
    7 Jan 2012
    Messages:
    1
    Likes Received:
    0
    Reputations:
    0
    подскажите как заставить работать браузер с прокси листом.
    (при нажатии на кнопку идет след. прокси).
     
  20. patcher

    patcher Banned

    Joined:
    15 Dec 2009
    Messages:
    190
    Likes Received:
    37
    Reputations:
    10
    http://www.delphimaster.ru/articles/TWebBrowser.html
     
Thread Status:
Not open for further replies.