- 0
TidHTTP не работает в Android 6
-
Похожий контент
-
- 20 ответов
- 6 141 просмотр
-
- 3 ответа
- 2 592 просмотра
-
- 2 ответа
- 3 364 просмотра
-
- 7 ответов
- 6 616 просмотров
-
- 37 ответов
- 13 194 просмотра
-
Тормоза при первом переключении вкладок TTabControl
От Евгений Корепов,
- Delphi XE8
- Android
- (и ещё 2 )
- 5 ответов
- 3 677 просмотров
-
- 1 ответ
- 1 922 просмотра
-
Исключить устройства с Intel Atom как не поддерживаемые 1 2 3
От Евгений Корепов,
- Android
- Delphi XE8
- (и ещё 1 )
- 55 ответов
- 13 442 просмотра
-
- 3 ответа
- 2 780 просмотров
-
- 6 ответов
- 2 684 просмотра
-
-
Последние посетители 0 пользователей онлайн
- Ни одного зарегистрированного пользователя не просматривает данную страницу
Вопрос
Евгений Корепов
TidHTTPClient перестал работать в Android 6. При попытке Get приложение закрывается с segmentation fault. То же самое приложение на всех остальных версиях андроида работает нормально.
На эмуляторе проверить не удалось, по какой то причине эмулятор с андроид 6 у меня запускается около часа, а попытка отладки приводит к зависанию дельфи.
Взял на пол часа живое устройство, отладка показала что крах происходит на стадии разбора результата. Т.е. данные с сервера реально получает (это подтверджают логи сервера), и при попытке вернуть результат все умирает. Код простой:
Var HTTPResult : TStringStream; URI: TIdURI; HTTP: TIdHTTP; begin AURL:='http://10.10.0.1'; FHost:='10.0.0.1'; HTTP:=TIdHTTP.Create; HTTP.CookieManager := TIdCookieManager.Create(HTTP); HTTP.Request.Host:=FHost; HTTP.AllowCookies := true; HTTP.HandleRedirects := True; HTTP.ConnectTimeout:=6000; HTTP.ReadTimeout:=30000; HTTP.Request.CustomHeaders.AddValue('Connection','keep-alive'); HTTP.Request.Accept:='text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8'; HTTP.Request.UserAgent:='Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.152 Safari/537.36'; HTTP.Request.AcceptEncoding:='gzip, deflate, sdch'; HTTP.Request.AcceptLanguage:='ru,en-US;q=0.8,en;q=0.6'; Result.Status:=False; Result.MessageText:=''; AURL:=StringReplace(AURL,'{AuthorizationKey}',AuthorizationKey,[]); AURL:=StringReplace(AURL,'{Host}',FHost,[]); HTTPResult:= TStringStream.Create('', TEncoding.UTF8); URI := TIdURI.Create(AURL); HTTP.CookieManager.AddServerCookie(CookieAuthorization, URI); try HTTP.Get(AURL,HTTPResult); except on E : Exception do begin Result.Status:=False; Result.MessageText:=E.Message; Exit; end; end; Result.Status:=True; Result.MessageText:=Trim(HTTPResult.DataString); HTTPResult.Free; URI. Free; end;Падает на строке HTTP.Get(AURL,HTTPResult);, try не срабатывает. Запрос именно http, не https.
К сожалению живое устройство было у меня не долго, досконально разобраться не успел.
Выяснил что падает на строке 1423 в idHTTP.pas:
IOHandler.ReadStream(LS, -1, True);
У кого будут какие мысли? Понятно что разработчики забили на Indy довольно давно, но не хочется целиком десяток проектов переписывать.
P.S. System.Net.HTTPClient работает в тех же условиях, не падает, но не смог заставить работать cookie, разбираюсь в чем дело. Хотя при отсутствии таймаутов и обработки редиректов применение сего очень ограничено.
14 ответов на этот вопрос
Рекомендуемые сообщения
Присоединяйтесь к обсуждению
Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.