2013-03-27 3 views
4

내가 문자열로 HTTP GET 방법을 통해 JSON 응답을 얻으려고로하지만 내가 가진 모든 것입니다 :HTTP GET JSON 문자열

memo1.Text:= idhttp1.Get('http://blabla.com/bla.php'); 
: 그와 같은 코드를 사용하고 enter image description here

json 데이터를 반환합니다. 나는 memo1에 대한 json 응답을 얻을 필요가있다.

어떻게하면됩니까?

+0

확인 당신이받는 텍스트의 인코딩 (어딘가에 헤더에 있어야한다) 및 유니 코드가 아닌 델파이를 사용하는 ANSI로 적절한 번역/변환, 즉 UTF-8을 적용합니다. 이러한 용어를 찾는 것은 많은 예제를 가져와야합니다. –

+1

@MarjanVenema : 문자열을 반환하는 'TIdHTTP.Get()'의 오버로드 된 버전은 이미 정확히 수행합니다. –

+0

@RemyLebeau : Cool. 알아 둘만한. –

답변

3

해결책을 찾았습니다. 그 코드는 완벽하게 작동합니다.

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; 
+0

대화 상자 오류를 표시하지 않고 오류를 텍스트로 가져 오는 방법이 있습니까? GetURLAsString ('http://google.com')'301 대화 상자가 열립니다. ' –

2

Indy의 새로운 버전을 사용해보십시오. Indy는 여전히 비 유니 코드 Delphi를 지원합니다.

인디 TIdHTTP automatially (제한 사항) ANSI로 UTF-8 변환해야 얻을 :

내부적으로 TIdHTTP.Get()는 유니 코드, 에 서버의 UTF-8 데이터를 디코딩 한 후 해당 변환 Ansi는 AnsiString으로 반환 할 때 이전 2009 버전입니다. AnsiString은 OS의 기본 Ansi 코드 페이지를 사용하므로 OS의 현재 언어가 서버에서 사용중인 유니 코드 문자를 지원하지 않으면 데이터 손실 가능성이 있습니다. http://forums2.atozed.com/viewtopic.php?f=7&t=3011