Http получить JSON в строку
Я пытаюсь получить ответ JSON через HTTP GET метод в строку, но все, что я получил, это:
Я использую такой код:
memo1.Text:= idhttp1.Get('http://blabla.com/bla.php');
он возвращает данные JSON. Мне нужно получить ответ JSON на memo1.
Как я могу это сделать?
2 ответа
Я нашел решение. Этот код работает отлично.
function GetURLAsString(aURL: string): string;
var
lHTTP: TIdHTTP;
lStream: TStringStream;
begin
lHTTP := TIdHTTP.Create(nil);
lStream := TStringStream.Create(Result);
try
lHTTP.Get(aURL, lStream);
lStream.Position := 0;
Result := lStream.ReadString(lStream.Size);
finally
FreeAndNil(lHTTP);
FreeAndNil(lStream);
end;
end;
Попробуйте новую версию Indy, Indy по-прежнему поддерживает не-Unicode Delphi.
Indy TIdHTTP Get должен автоматически конвертировать UTF-8 в Ansi (с ограничениями):
Внутренне TIdHTTP.Get() декодирует данные UTF-8 сервера в Unicode, а затем преобразует их в Ansi при возврате в виде AnsiString в версиях до 2009 года. Что AnsiString использует кодовую страницу Ansi по умолчанию в ОС, так что да, существует вероятность потери данных, если текущий язык ОС не поддерживает символы Unicode, используемые сервером. http://forums2.atozed.com/viewtopic.php?f=7&t=3011