Перейти к содержанию
Fire Monkey от А до Я
  • 0

idHTTP в потоке выдаёт ошибку HTTP /1.1 500 Internal Server Error


mrseagull

Вопрос

Программа работает c сайтом используя POST запросы на xxxx.com/api сайта. Использую idHTTP, все усложнено тем что иногда происходит вызовы в потоке, не знаю на сколько это влияет на стабильность idHTTP, но все же. Все работает работает, но при частых запросах перестает это делать адекватно и возвращает ошибки типа "EIdHTTPProtocolException with message 'HTTP/1.1 500 Internal Server Error'" 

Захотел перейти на что-то еще, прочитал о HTTPClient, но не нашел мануалов. Программа уже большая и хотелось бы безболезненно перейти на HTTPClient.
Если кто работал, можете показать основы POST запросов и работы с этим компонентом, а то сил уже нет с idHTTP мучатся :(

Ссылка на комментарий

Рекомендуемые сообщения

  • 0

покажите примерный код потока

в целом там не очень много различий


 

var  resp:IHTTPResponse; ...

  req:=TStringStream.Create;
  res:=TStringStream.Create;

resp:=fhttp.Post(uri, req);

если нет связи, вылетит exception

если связь есть, анализируем resp.StatusCode

если 200, то ОК, 

res.LoadFromStream(resp.ContentStream);
s:=res.DataString;

 

Ссылка на комментарий
  • 0

  
    Код обычный для такого плана работы с POST запросами

    TMemoryStream *fs = new TMemoryStream();
         TStringStream *SS = new TStringStream(L"", TEncoding::UTF8, false);
        TStringList *s = new TStringList;

        s->Clear();
        s->Add("login=" + fm->EditLogin->Text);
        s->Add("password=" + fm->EditPass->Text);
        s->Add("apikey=6IY4XWfiP6I4NgPGg");

        fm->IdHTTP1->HandleRedirects = true;
        fm->IdHTTP1->Post(L"http://xxxxxx.ru/api", s, SS);

    
Но если это дело в сервере, то тогда видимо все сложнее. Надо понять почему сервер себя так ведет

Изменено пользователем mrseagull
Ссылка на комментарий
  • 0

Когда в главном потоке проверяю доступ в интернет GET запросом на старницу, все нормально 

   IdHTTP1->Get("http://xxxxxx.ru/connect");

GET и POST запросы с параметрами в отдельном потоке уже с ошибкой  "EIdHTTPProtocolException with message ' HTTP /1.1  500 Internal Server Error '"

Ссылка на комментарий
  • 0
9 часов назад, krapotkin сказал:

IdHTTP1 надеюсь тут же, в потоке создается?

но выяснять надо конечно на сервере

Нет IdHTTP общий лежит на главной форме и с потока к нем у обращаются. Это плохо?

У меня несколько потоков если в каждом создать по idHTTP это не вернется мне какими нибудь минусами?

9 часов назад, umkes сказал:

А может это веб сервер рушится, от большого количества запросов?

Возможно и так, но точно не скажу. Особо запросами не закидывал.

Ссылка на комментарий
  • 0
  • Модераторы
6 часов назад, mrseagull сказал:

Нет IdHTTP общий лежит на главной форме и с потока к нем у обращаются. Это плохо?

так делать нельзя, для каждого потока собственный "канал связи" с сервером должен быть.

Иначе получится что IdHttp отослал запрос и ждёт ответа, а в этот момент ему снова другой поток говорит что нужно отправить данные

Ссылка на комментарий

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить на вопрос...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...