Пользовательский заголовок TIdHttp при перенаправлении - PullRequest
2 голосов
/ 09 июля 2019

У меня проблема с обработкой перенаправлений с пользовательским заголовком.Несколько запросов к конечной точке REST-API подтверждаются с помощью HTTP / 1.1 301 Moved Permanently.

Это мой код:

procedure APIRequest(const url, token: string; request, response: TStream);
var
  http: TIdHttp;
  ssl: TIdSSLIOHandlerSocketOpenSSL;
begin
  http := TIdHttp.Create(nil);
  ssl := TIdSSLIOHandlerSocketOpenSSL.Create(http);
  try
    ssl.SSLOptions.SSLVersions := [sslvTLSv1_2];
    http.IOHandler := ssl;

    http.HandleRedirects := true;

    http.Request.CustomHeaders.Clear;
    http.Request.Accept := 'application/json';
    http.Request.CustomHeaders.FoldLines := false; // without http status code 400
    http.Request.CustomHeaders.Values['Authorization'] := 'Bearer ' + token;

    try
      if request = nil then
        http.Get(url, response)
      else
        http.Post(url, request, response);
    except
      on e: EIdHTTPProtocolException do begin
        if response is TStringStream then
          (response as TStringStream).WriteString(e.ErrorMessage); // errormessage is the actual http-body
      end;
    end;
  finally
    http.Free;
  end;
end;

Он прекрасно работает, пока не обрабатывает перенаправления.Выдает следующее сообщение об ошибке:

HTTP / 1.1 400 Информация аутентификации не указана в правильном формате.Проверьте значение заголовка авторизации.

Я предполагаю, что пользовательский заголовок теряется, когда он следует за редиректом.

Я попытался взглянуть на заголовок запроса, но fiddler 4 isn 'не отслеживаю мой процесс.

У кого-нибудь есть идеи, как это сделать?Пожалуйста, укажите мне в правильном направлении.Заранее спасибо.

Обновление 20190710 09: 40

Хорошо, пользовательский заголовок не теряется.Нужен ли мне менеджер файлов cookie?

Это журнал из TIdLogFile, как предложил Реми:

Stat Connected.
Sent 10.07.2019 09:35:52: GET /api/v1.0/Products HTTP/1.1
Authorization: Bearer mysecrettoken
Host: mysecrethost.de
Accept: application/json
Accept-Encoding: identity
User-Agent: Mozilla/3.0 (compatible; Indy Library)


Recv 10.07.2019 09:35:52: HTTP/1.1 301 Moved Permanently
Location: https://mysecretsubdomain.blob.core.windows.net/products/Products.json?sv=2018-03-28&sr=b&sig=%2F8Y4qCtsLhJUYHJVHgM2cvlyg6hLI4pLg16FEmvQzsY%3D&st=2019-07-10T07%3A20%3A52Z&se=2019-07-10T07%3A50%3A52Z&sp=r
Request-Context: appId=cid-v1:49572fba-119a-44ce-80c2-e12dd8810c9a
Date: Wed, 10 Jul 2019 07:35:52 GMT
Content-Length: 0


Stat Disconnected.
Stat Connected.
Sent 10.07.2019 09:35:52: GET /products/Products.json?sv=2018-03-28&sr=b&sig=%2F8Y4qCtsLhJUYHJVHgM2cvlyg6hLI4pLg16FEmvQzsY%3D&st=2019-07-10T07%3A20%3A52Z&se=2019-07-10T07%3A50%3A52Z&sp=r HTTP/1.1
Authorization: Bearer mysecrettoken
Host: mysecretsubdomain.blob.core.windows.net
Accept: application/json
Accept-Encoding: identity
User-Agent: Mozilla/3.0 (compatible; Indy Library)


Recv 10.07.2019 09:35:52: HTTP/1.1 400 Authentication information is not given in the correct format. Check the value of Authorization header.
Content-Length: 298
Content-Type: application/xml
Server: Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0
x-ms-request-id: ec5b36eb-c01e-0112-69f2-36b58a000000
Date: Wed, 10 Jul 2019 07:35:52 GMT

<?xml version="1.0" encoding="utf-8"?>
<Error><Code>InvalidAuthenticationInfo</Code><Message>Authentication information is not given in the correct format. Check the value of Authorization header.
RequestId:ec5b36eb-c01e-0112-69f2-36b58a000000
Time:2019-07-10T07:35:52.8167021Z</Message></Error>
Stat Disconnected.
...