Delphi HMRC test-api.service.hmrc.gov.uk/hello/world - PullRequest
0 голосов
/ 05 октября 2018

Я пробую учебные пособия HMRC Developers HUB от:

https://developer.service.hmrc.gov.uk/api-documentation/docs/tutorials

Я пробовал два способа «Hello World», но продолжаю получать:

{"code":"ACCEPT_HEADER_INVALID","message":"The accept header is missing or invalid"}

Пример 1 REST-клиент:

procedure TForm1.btnTest_REST_ClientClick(Sender: TObject);
var
  jValue: TJSONValue;
begin
  RESTClient1.BaseURL := cbHMRC_Test_URLs.Text;
  RESTRequest1.Execute;

  jValue := RESTResponse1.JSONValue;
  MemoContent.Text:= jValue.ToString;
end;

With a RESTRequest header of:-

Пример 2 TdHTTP:

procedure TForm1.btnTest_HTTPClick(Sender: TObject);
var
  get_url: string;
  resp: TMemoryStream;
begin
  get_url := 'https://test-api.service.hmrc.gov.uk/hello/world';
  resp := TMemoryStream.Create;
  try
    IdHttp1.Request.CustomHeaders.AddValue('Accept', 'application/vnd.hmrc.1.0+json');
    IdHTTP1.Get(get_url, resp);

    resp.Position := 0; // <-- add this!!
    MemoContent.Lines.LoadFromStream(resp);
  finally
    resp.Free;
  end;
end;

Оба устанавливают соединение, но не удается в заголовке.

Есть идеи о том, что я делаю неправильно?

Ответы [ 2 ]

0 голосов
/ 09 ноября 2018

Для тех из вас, кто, как и я, борется с тем, как реализовать начальные учебные пособия по HMRC в Delphi, попробуйте следующее.

Создайте новое приложение.Я выбрал опцию Multi-Device / Blank Application.

В основной форме добавьте следующие компоненты: -

TRESTClient TRESTRequest TRESTResponse TMemo TButton

Добавить System.JSONединица к пункту использования.

Установите процедуру Button1Click следующим образом: -

procedure TForm1.Button1Click(Sender: TObject);
var
  jValue: TJSONValue;


begin

  RESTClient1.BaseURL := 'https://test-api.service.hmrc.gov.uk/hello/world';
  RESTRequest1.Accept := 'application/vnd.hmrc.1.0+json';
  RESTRequest1.Execute;

  jValue := RESTResponse1.JSONValue;
  Memo1.Text:= jValue.ToString;
end;

Запустите программу, нажмите кнопку и вуаля!

Надеюсь, это кому-нибудь поможет

0 голосов
/ 10 октября 2018

Я бы предложил пойти с компонентами REST.Я использовал их значительно, и они работают довольно хорошо.

На стороне компонента REST вы просто пропустили значение запроса на принятие:

RESTRequest1.Accept := 'application/vnd.hmrc.1.0+json';

Я протестировал ваш пример на их hello world resourceи получил:

{"message":"Hello World"}

Похоже, это работает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...