Size: a a a

2020 February 12

AK

Alexey Kulakov in Delphi & Lazarus
ну, юзерагент там не особо нужен, форма не используется
источник

AK

Alexey Kulakov in Delphi & Lazarus
а с длиной в заголовке - это просто гугл одно время матерился на отсутствие этого поля
источник

RS

Renat Suleymanov in Delphi & Lazarus
Renat Suleymanov
Пример простого запроса с помощью нативного клиента:
 FHTTPClient.AddHeader('User-Agent', UserAgent);
 aResult:=FHTTPClient.FormPost(URL, FormData);
Никакого Content-length не нужно
Если же тебе нужно именно с помощью Post(aUrl), то предварительно загружаешь в поток данные POST с помощью свойства RequestBody (TStream)
источник

AK

Alexey Kulakov in Delphi & Lazarus
да ничто там не надо отдельно загружать. хоть ПОСТ, хоть ГЕТ и так обрабатываются, как у меня, всё в запросе - размер данных небольшой
источник

AK

Alexey Kulakov in Delphi & Lazarus
головняк будет с теми сервисами, где апи вообще нет, только отправка формы с возвратом html страницы, парсить придётся
источник

RS

Renat Suleymanov in Delphi & Lazarus
Alexey Kulakov
да ничто там не надо отдельно загружать. хоть ПОСТ, хоть ГЕТ и так обрабатываются, как у меня, всё в запросе - размер данных небольшой
Очень странно. Откуда в твоем коде клиенту будет известно, что пихать в POST данные запроса???
источник

RS

Renat Suleymanov in Delphi & Lazarus
Renat Suleymanov
Очень странно. Откуда в твоем коде клиенту будет известно, что пихать в POST данные запроса???
Если заглянешь в исходный код Post(aUrl) - увидишь, что Post данные, если они не указаны вторым параметром берутся из стрима RequestBody. Заголовок ContentLength кстати автоматически добавляется
источник

AK

Alexey Kulakov in Delphi & Lazarus
class function TFPCustomHTTPClient.SimplePost(const URL: string): RawByteString;

begin
 With Self.Create(nil) do
   try
     KeepConnection := False;
     Result:=Post(URL);
   finally
     Free;
   end;
end;
откуда сам фпц это берёт - это уже его дело :)
источник

AK

Alexey Kulakov in Delphi & Lazarus
верю, что дрлжен добавляться. говою же, ошибка возвращалась когда, я проверял и ручное добавление.
источник

RS

Renat Suleymanov in Delphi & Lazarus
Alexey Kulakov
верю, что дрлжен добавляться. говою же, ошибка возвращалась когда, я проверял и ручное добавление.
С другой стороны, если у тебя не было тела для POST запроса, то как бы он автоматически вычислял длину )
источник

AK

Alexey Kulakov in Delphi & Lazarus
ну должен (в теории)
источник

RS

Renat Suleymanov in Delphi & Lazarus
Alexey Kulakov
class function TFPCustomHTTPClient.SimplePost(const URL: string): RawByteString;

begin
 With Self.Create(nil) do
   try
     KeepConnection := False;
     Result:=Post(URL);
   finally
     Free;
   end;
end;
откуда сам фпц это берёт - это уже его дело :)
Даже в комментах в коде написано
   // Simple post
   // Post URL, and Requestbody. Return response in Stream, File, TstringList or String;
 Но видимо это такой пост запрос без ПОСТ тела )
источник

AK

Alexey Kulakov in Delphi & Lazarus
я не штудировал ВСЮ глубину исходника, ориентировался на примеры и паблики
источник

GB

George Bakhtadze in Delphi & Lazarus
Alexey Kulakov
ну, скажем, так...
   res:=TFPHTTPClient.SimplePost(
       g_host+
       g_lang+'ru'+
       g_text+EncodeURLElement(src));
при вызове
TranslateGoogle('stars are Fl&ry bright. Isn''t it?')
перевидывало меня на страницу с каптчей (если полученый адрес в браузере открыть), а прога тупо "зависала" до нажатия Esc. Вот для такого случая и хотел возврат по таймеру сделать.
что значит зависала до нажатия ESC? кто требует нажатия ESC? явно не httpClient
источник

AK

Alexey Kulakov in Delphi & Lazarus
ну, в консольном приложении не возвращалось управление в программу из запроса. Я же говорил, что не копал слишком глубоко, так что где именно возникала такая пауза, я не в курсе
источник

RS

Renat Suleymanov in Delphi & Lazarus
Alexey Kulakov
ну, в консольном приложении не возвращалось управление в программу из запроса. Я же говорил, что не копал слишком глубоко, так что где именно возникала такая пауза, я не в курсе
В любом случае еще раз напомню про таймауты. ConnectionTimeout и IOTimeOut
источник

AK

Alexey Kulakov in Delphi & Lazarus
угу, IOTimeout пока установил в коде
источник

DB

Dmitry Belkevich in Delphi & Lazarus
несколько комментариев.
1. terminatethread - это путь к утечкам, локам файлов и ресурсов. заканчивается это всегда плохо. поэтому надо искать путь как нормально останавливать поток
2. синапс уже очень давно не обновляется и врятли будет. у себя в репе я собрал максимально что мог в кучу. тестируется это в основном как серверы, меньше как клиенты, поэтому 100% гарантии нет что там всё живое. но то, что тестируем работает как часы винда/линкс
источник

DB

Dmitry Belkevich in Delphi & Lazarus
чуть позже я выложу реализацию http(s) сервера на синапсе, он уже достаточно обкатан что бы не стыдно показывать. на основе примера, по сети бегает там-сям
источник

DB

Dmitry Belkevich in Delphi & Lazarus
на синапсе сейчас в две стороны работает два протокола над tcp третий( http) только на раздачу. известных проблем с текущими сырцами нет
источник