1. Pascal / Говнокод #26060

    0

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    24. 24
    25. 25
    26. 26
    procedure TForm1.Button1Click(Sender: TObject);
      var
        RequestBody,SResponseBody: TStringStream;
    
        ResponseBody: string;
    begin
    
    
      try
         RequestBody := TStringStream.Create('{"login":"user","password":"pass999"}') ;
        httpconn.HandleRedirects:=TRUE;
        IdSSLIOHandlerSocketOpenSSL1.SSLOptions.Method:=sslvSSLv23;
        //httpconn.Host:='api.owencloud.ru';
        httpconn.Request.Accept:='application/xml';
        httpconn.Request.ContentLength:=68;
        httpconn.Request.ContentType:='application/x-www-form-urlencoded';
    
        ResponseBody:=httpconn.Post('https://api.owencloud.ru/v1/auth/open', RequestBody);
        SResponseBody:=TStringStream.Create(httpconn.Post('https://api.owencloud.ru/v1/auth/open', RequestBody));
        memo1.Text:=utf8toansi(ResponseBody);
        xmldocument1.LoadFromStream(SResponseBody);
     finally
        RequestBody.Free;
        SResponseBody.Free;
     end;
    end;

    Передача в мемо волшебна, а в xml так вообще виртуозна

    Запостил: untitled_001, 30 Ноября 2019

    Комментарии (15) RSS

    • Приведи пример, где тебе реально в работе нужен "Delphi".
      Ответить
    • показать все, что скрытоvanished
      Ответить
    • 1. Антипаттерн «Волшебная кнопка».

      2. '{"login":"user","password":"pass999 "}' несильно похоже на 'application/x-www-form-urlencoded'. httpconn умеет перекодировать JSON в x-www-form-urlencoded?

      3. Магическая константа: httpconn.Request.ContentLength:=68;
      Откуда она взялась? И как её корректировать, если вдруг пароль сменится?

      4. Вызов httpconn.Post('https://api.owencloud.ru/v1/auth/open', RequestBody) у нас два раза? Почему результат первого помещается в мемо, а второго — в XML?
      Ответить
    • try
      ..
       finally
          RequestBody.Free;
          SResponseBody.Free;
       end;

      Няшненько. Здесь Паскаль выглядит очень даже не дерьмово.

      >TStringStream
      >finally
      Паскаль с запахом жабизны.
      Ответить
      • Во-1 нет мусорных скобок, во-2 идиоматичный метод Free вместо крестоблядских delete.

        Но всё-таки это же не Ява, могли бы и RAII завезти.
        А если уж косить под яву, то try-with-resources, чтобы ресурсы автоматически освобождать.
        Ответить
      • Блок try... finally впервые появился в «Delphi 1.0». С того момента прошла четверть века.

        Эту конструкцию потом унаследовали все реализации языка «Object Pascal» («Free Pascal», «PascalABC», «Oxygene» и ещё несколько компиляторов, которые оказались тупиковыми ветвями). Да, творение «Борланда» можно называть новым языком программирования.
        Ответить
      • Я всегда считал, что паскаль пахнет хуем.
        Ответить
    • Нельзя вызывать конструкторы в блоке try..finally!
      Ответить

    Добавить комментарий