Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Delphi [игнор отключен] [закрыт для гостей] / чтение API / 14 сообщений из 14, страница 1 из 1
21.01.2021, 20:26
    #40037760
terlalex
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
чтение API
Здравствуйте

работаю с API

если мой запрос ввести в обозреватель

https://api.keepa.com/tracking?key=9abpi7cn3q3rusa5is3cqji4urg46t1qpdko2vp6rolklb9ghs5laagonasf563t&type=get&asin=B005D6FXEY

то вижу вполне нормальный ответ

{"timestamp":1611249779495,"tokensLeft":300,"refillIn":56774,"refillRate":5,"tokenFlowReduction":0.0,"tokensConsumed":0,"processingTimeInMs":0,"error":{"type":"trackingNotFound","message":"There was no tracking for the specified ASIN","details":""}}
но в программе не получаю этого
использую эту функцию


Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
function HttpGetUrl(url: string; idHttp: TIdHttp): string;
var
  M: TStringStream;
begin
  M := TStringStream.Create('');
  try
      IdHTTP.Get(url, m);
      if IdHTTP.ResponseCode = 502 then
        begin
          result := 'Ошибка 502. ' + url;
          freeandnil(m);
          exit;
        end;
  except
      on e: exception do
        begin
          result := 'Ошибка *HttpGetUrl*. ' + url;
          if Assigned(m) then freeandnil(m);
        end;
  end;// try except
    result := m.DataString;
    M.SaveToFile('result.txt');
    freeandnil(m);
end;


в файле вижу

? 5???EU9§k:?·Q(?ty+­IbK!???V??s?????????n·u?o˜o;?uU2vq?¤¦«on/uoZ.?©i7vm:P? °?)S???: I'~a?2???KA?o{??G?S?t.u???f???e#w4<a»?A|y4g
y???{?<u


memo отображает только первые 2 символа

пытался менять кодировку соединения, но не приводит к результатам

Модератор: Пользуйтесь тегом (кнопкой) SRC для оформления кода, пожалуйста.
...
Рейтинг: 0 / 0
21.01.2021, 21:43
    #40037771
wadman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
чтение API
Версия Delphi какая?
...
Рейтинг: 0 / 0
21.01.2021, 21:47
    #40037772
terlalex
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
чтение API
Embarcadero® Delphi 10.2 Version 25.0.26309.314
...
Рейтинг: 0 / 0
21.01.2021, 21:54
    #40037775
rgreat
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
чтение API
StringStream читает строку UTF16. А в выдаваемом тебе ответе UTF-8.
...
Рейтинг: 0 / 0
21.01.2021, 22:34
    #40037783
terlalex
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
чтение API
результат вывожу через функцию


result := UTF8ToWideString (m.DataString)



но все равно не хочет работать
...
Рейтинг: 0 / 0
21.01.2021, 22:42
    #40037784
_Vasilisk_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
чтение API
terlalex,

А если заменить TStringStream на TMemoryStream?
...
Рейтинг: 0 / 0
21.01.2021, 23:02
    #40037790
terlalex
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
чтение API
всеравно результат

‹ =ЋЛ
В@EeИєHЗ'v'‚PР.Ф:©¶“2I)"ю»QФнЙ№7ч:dq]…]Z;]¬нj9]Н2єaд=6Е,П3HШ„¶-#;·pt‚ЉѕЃ]KгэPK 5уIюkЪRдЎCЇ0ѓ>QЌМ!^О: Њю`L‰ђ{ЇҐ ЙХ7•*’
СC:—Эе}<_1Ў›Hжgљ†’‘+о±M@o6§ІТ GqЎХ? Пзb»й№щ


Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
function HttpGetUrl(url: string; idHttp: TIdHttp): string;
var
  M , m1 : TMemoryStream;
  i:integer ;
  StringBytes: TBytes;

begin
  M := TMemoryStream.Create;

    try
     IdHTTP.Get(url, m);
        if IdHTTP.ResponseCode = 502 then
       begin
          result := 'Ошибка 502. ' + url;
          freeandnil(m);
          exit;
        end;
  except
      on e: exception do
        begin
          result := 'Ошибка *HttpGetUrl*. ' + url;
          if Assigned(m) then freeandnil(m);
        end;
  end;// try except

  m.Position := 0;
  SetLength(StringBytes, m.Size);
  m.ReadBuffer(StringBytes, m.Size);
  M.SaveToFile('res.txt');
end;
...
Рейтинг: 0 / 0
21.01.2021, 23:37
    #40037792
rgreat
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
чтение API
terlalex
результат вывожу через функцию


result := UTF8ToWideString (m.DataString)



но все равно не хочет работать
m.DataString - это уже не правильно.
Не трахай себе и людям мозг.

result:=IdHTTP.Get(url);
...
Рейтинг: 0 / 0
21.01.2021, 23:43
    #40037793
rgreat
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
чтение API
А еще лучше без Indy через THTTPClient/TNetHTTPClient.

Result:=HTTP.Get(URL).ContentAsString;
...
Рейтинг: 0 / 0
22.01.2021, 00:43
    #40037798
terlalex
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
чтение API
Использую эту функцию
но опять нет результата


Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
   function GetUrlContent(const Url: string): UTF8String;
var
  NetHandle: HINTERNET;
  UrlHandle: HINTERNET;
  Buffer: array[0..1023] of byte;
  BytesRead: dWord;
  StrBuffer: UTF8String;
begin
  Result := '';
  NetHandle := InternetOpen('Delphi 2009', INTERNET_OPEN_TYPE_PRECONFIG, nil, nil, 0);
  if Assigned(NetHandle) then
    try
      UrlHandle := InternetOpenUrl(NetHandle, PChar(Url), nil, 0, INTERNET_FLAG_RELOAD, 0);
      if Assigned(UrlHandle) then
        try
          repeat
            InternetReadFile(UrlHandle, @Buffer, SizeOf(Buffer), BytesRead);
            SetString(StrBuffer, PAnsiChar(@Buffer[0]), BytesRead);
            Result := Result + StrBuffer;
          until BytesRead = 0;
        finally
          InternetCloseHandle(UrlHandle);
        end
      else
        raise Exception.CreateFmt('Cannot open URL %s', );
    finally
      InternetCloseHandle(NetHandle);
    end
  else
    raise Exception.Create('Unable to initialize Wininet');
end;
...
Рейтинг: 0 / 0
22.01.2021, 00:50
    #40037799
terlalex
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
чтение API
так получилось !

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
 function GetURL(const AURL: string): string;
var
  HttpClient: THttpClient;
  HttpResponse: IHttpResponse;
begin
  HttpClient := THTTPClient.Create;
  try
    HttpResponse := HttpClient.Get(AURL);
    Result := HttpResponse.ContentAsString();
  finally
    HttpClient.Free;
  end;
end;



Модератор: Пользуйтесь тегом (кнопкой) SRC для оформления кода, пожалуйста.
...
Рейтинг: 0 / 0
22.01.2021, 01:22
    #40037802
rgreat
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
чтение API
terlalex,

отдельный HttpResponse: IHttpResponse; - лишний.
...
Рейтинг: 0 / 0
23.01.2021, 14:27
    #40038270
aleksandr-pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
чтение API
terlalex,а не похоже ли это на сжатый трафик ?
я с таким сталкивался когда то, сервер отдавал данные в сжатом виде то есть банально gzip indy до последних версий вроде не умеет их на лету распаковвывать
...
Рейтинг: 0 / 0
23.01.2021, 14:36
    #40038271
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
чтение API
aleksandr-proа не похоже ли это на сжатый трафик ?

Ну, наверное он не полный идиот и догадался проверить заголовки на признак компрессии...
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Форумы / Delphi [игнор отключен] [закрыт для гостей] / чтение API / 14 сообщений из 14, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]