[Delphi] Помощь по Synapse

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by Apocalypse, 3 Jan 2009.

  1. Apocalypse

    Apocalypse New Member

    Joined:
    30 Jul 2007
    Messages:
    0
    Likes Received:
    4
    Reputations:
    0
    Доброе время суток, форумчане.

    Такой вопрос. Пишу регелку аккаунтов для сервисов соц. закладок.

    Только начал. Пользуюсь пакетом Synapse для реализации сетевых запросов.

    Принцип следующий:
    1) Прога запрашивает капчу со страницы регистрации методом GET
    2) Юзер вводит символы с капчи и отправляет POST, все остальные данные логин, пароль и е-майл, вводятся сами

    Проблема - я не знаю почему но в ответе от сервера, после метода POST, приходит ошибка 411 =(
     
    1 person likes this.
  2. Pir4tt

    Pir4tt Elder - Старейшина

    Joined:
    3 Jan 2008
    Messages:
    73
    Likes Received:
    36
    Reputations:
    5
    Мм, не знаком с Синапсом, пользуюсь Indy или сокетами для сетевых программ. Но тоже встречался с этой ошибкой - твоя прога не передаёт Content-Length, в нём должен быть размер передаваемых даннх ака length(PostedData), Прописывается при сборе пакета как хост, рефер, кукисы, браузер и т.д. Так же у меня был глюк, что вроде передавал размер, но не правильной длинны - было из-за того что передавался некий текст, кодирующийся с помощью UrlEncode, в программе оставляющей только A-Z,a-z,0-9 и "_", а сервак принимал так же незакодированые "." и "*", Соответственно длина в моей проге и то что считалось на серваке не сходилось, и выдавалась та же ошибка :)
     
  3. Chrome~

    Chrome~ Elder - Старейшина

    Joined:
    13 Dec 2008
    Messages:
    936
    Likes Received:
    162
    Reputations:
    27
    Скорее всего либо не туда отправляешь, либо параметры передаешь неверные.
     
  4. PandoraBox

    PandoraBox Elder - Старейшина

    Joined:
    6 May 2007
    Messages:
    262
    Likes Received:
    176
    Reputations:
    7
    Code:
    unit Bugagu;
    
    interface
    
    uses Windows, WinInet;
    
      function UrlEncode(Str: string): string;
      function UrlDecode(Str: string): string;
      function GetFileData(szFile: PChar): PChar;
      procedure Send_POST_Data(Const szHost, szPath, szData: PChar);
    
    implementation
    
    function UrlEncode(Str: string): string;
      function CharToHex(Ch: Char): Integer;
      asm
        and eax, 0FFh
        mov ah, al
        shr al, 4
        and ah, 00fh
        cmp al, 00ah
        jl @@10
        sub al, 00ah
        add al, 041h
        jmp @@20
    @@10:
        add al, 030h
    @@20:
        cmp ah, 00ah
        jl @@30
        sub ah, 00ah
        add ah, 041h
        jmp @@40
    @@30:
        add ah, 030h
    @@40:
        shl eax, 8
        mov al, '%'
      end;
    var
      i, Len: Integer;
      Ch: Char;
      N: Integer;
      P: PChar;
    begin
      Result := '';
      Len := Length(Str);
      P := PChar(@N);
      for i := 1 to Len do
      begin
        Ch := Str[i];
        if Ch in ['0'..'9', 'A'..'Z', 'a'..'z', '_'] then
          Result := Result + Ch
        else
        begin
          if Ch = ' ' then
            Result := Result + '+'
          else
          begin
            N := CharToHex(Ch);
            Result := Result + P;
          end;
        end;
      end;
    end;
    
    function UrlDecode(Str: string): string;
      function HexToChar(W: word): Char;
      asm
       cmp ah, 030h
       jl @@error
       cmp ah, 039h
       jg @@10
       sub ah, 30h
       jmp @@30
    @@10:
       cmp ah, 041h
       jl @@error
       cmp ah, 046h
       jg @@20
       sub ah, 041h
       add ah, 00Ah
       jmp @@30
    @@20:
       cmp ah, 061h
       jl @@error
       cmp al, 066h
       jg @@error
       sub ah, 061h
       add ah, 00Ah
    @@30:
       cmp al, 030h
       jl @@error
       cmp al, 039h
       jg @@40
       sub al, 030h
       jmp @@60
    @@40:
       cmp al, 041h
       jl @@error
       cmp al, 046h
       jg @@50
       sub al, 041h
       add al, 00Ah
       jmp @@60
    @@50:
       cmp al, 061h
       jl @@error
       cmp al, 066h
       jg @@error
       sub al, 061h
       add al, 00Ah
    @@60:
       shl al, 4
       or al, ah
       ret
    @@error:
       xor al, al
      end;
    
      function GetCh(P: PChar; var Ch: Char): Char;
      begin
        Ch := P^;
        Result := Ch;
      end;
    var
      P: PChar;
      Ch: Char;
    begin
      Result := '';
      P := @Str[1];
      while GetCh(P, Ch) <> #0 do
      begin
        case Ch of
          '+': Result := Result + ' ';
          '%':
            begin
              Inc(P);
              Result := Result + HexToChar(PWord(P)^);
              Inc(P);
            end;
        else
          Result := Result + Ch;
        end;
        Inc(P);
      end;
    end;
    
    function GetFileData(szFile: PChar): PChar;
    var
     hFile, dwSize, dwBytes: DWORD;
    begin
     Result := '';
     hFile := CreateFile(szFile, GENERIC_READ, 0, nil, OPEN_EXISTING, 0, 0);
     if hFile <> INVALID_HANDLE_VALUE then
     begin
      dwSize := GetFileSize(hFile, nil);
      Result := VirtualAlloc(nil, dwSize, MEM_COMMIT, PAGE_READWRITE);
      ReadFile(hFile, Result^, dwSize, dwBytes, nil);
     end;
     CloseHandle(hFile);
    end;
    
    procedure Send_POST_Data(Const szHost, szPath, szData: PChar);
    var
      hOpenHandle, hConnectHandle, hResourceHandle: Pointer;
    begin
     hOpenHandle := InternetOpen(nil, INTERNET_OPEN_TYPE_PRECONFIG, nil, nil, 0);
     if hOpenHandle <> nil then
     begin
      hConnectHandle := InternetConnect(hOpenHandle, szHost, 80, nil, nil, 3, 0, 0);
      if hConnectHandle<>nil then
      begin
       hResourceHandle := HttpOpenRequest(hConnectHandle, 'POST', szPath, nil, nil, nil, INTERNET_FLAG_KEEP_CONNECTION, 0);
       if hResourceHandle <> nil then
        begin
         HttpSendRequest(hResourceHandle, 'Content-Type: application/x-www-form-urlencoded', 47, szData, lstrlen(szData));
        end;
        InternetCloseHandle(hResourceHandle);
       end;
       InternetCloseHandle(hConnectHandle);
      end;
      InternetCloseHandle(hOpenHandle);
    end;
     
  5. 2pick

    2pick Elder - Старейшина

    Joined:
    17 Mar 2007
    Messages:
    117
    Likes Received:
    39
    Reputations:
    2
    Подскажите по этой ф-ии
    PHP:
    function GetFileData(szFilePChar): PChar;
    var
     
    hFiledwSizedwBytesDWORD;
    begin
     Result 
    := '';
     
    hFile := CreateFile(szFileGENERIC_READ0nilOPEN_EXISTING00);
     if 
    hFile <> INVALID_HANDLE_VALUE then
     begin
      dwSize 
    := GetFileSize(hFilenil);
      
    Result := VirtualAlloc(nildwSizeMEM_COMMITPAGE_READWRITE);
      
    ReadFile(hFileResult^, dwSizedwBytesnil);
     
    end;
     
    CloseHandle(hFile);
    end;
    При отладке смотрю переменную result и вот косяк - текстовый файл читается замечательно, а вот бинарник только первые 5-10 байт. Как победить?
     
    #5 2pick, 24 Aug 2009
    Last edited: 24 Aug 2009
  6. Magister Yoda

    Magister Yoda New Member

    Joined:
    14 Aug 2009
    Messages:
    15
    Likes Received:
    0
    Reputations:
    0
    интересует ответ хотя бы на один из вопросов:
    1. как перекинуть куки из Synapse в Indy?
    Code:
    Form1.IdCookieManager1.AddCookie(HTTP.Cookies.Text,'XXX.com');
    Form1.Memo1.Text:=Form1.IdHTTP1.Get('http://XXX.com/');
    при выполнении form1.idhttp1.get пишет HTTP/1.1 400 Bad Request.
    программу ничто не блокирует и сайт доступен

    2. Есть ли в Synapse что-то наподобии TIdMultiPartFormDataStream, если да то как его юзать?
     
  7. denisov21g21

    denisov21g21 Banned

    Joined:
    1 Jul 2009
    Messages:
    17
    Likes Received:
    1
    Reputations:
    -1
    служба поддержки VDS manager
    591-493-245