REST API timeout

Hallo,

arbeite seit kurzem mit Shopware 6 und versuche über ein eignes Programm auf die REST API zu zugreifen. Ich habe erfolgreich ein access_token bekommen (/api/oauth/token).

Aber wenn ich jetzt versuche die „Hersteller“ aufzulisten (/api/manufacturers), erhalte ich ein Timeout (Unexpected response status code: 408).

 

Ich arbeite mit der Programmiersprach FreePascal:

var client : TFPHTTPClient;
    stream : TStringStream;
    baseURL, body : String;
    res : String;

    jData : TJSONData;
    jObject : TJSONObject;
    access_token : String;

begin
  baseURL := 'https://';

  InitSSLInterface();
  client := TFPHTTPClient.Create(nil);

  // Get access-token
  client.RequestHeaders.Add('Content-Type: application/json');



  body := '{' +
              '"client_id": "administration",' +
              '"grant_type": "password",' +
              '"scopes": "read",' +
              '"username": "",' +
              '"password": ""' +
          '}';
  stream := TStringStream.Create(body);
  client.RequestBody := TStream(stream);
  res := client.Post(baseURL + '/api/oauth/token');
  client.RequestBody := nil;
  jData := GetJSON(res);
  Writeln(jData.FormatJSON());


  jObject := TJSONObject(jData);
  access_token := jObject.Get('access_token');
  client.RequestHeaders.Add('Authorization: Bearer ' + access_token);


  writeln();
  writeln();

  // get manufactures-list
  Writeln('try to list manufacturers...');
  try
    writeln(client.Get(baseURL + '/api/manufacturers'));
  except
    on E:EHTTPClient do begin
      Writeln(E.Message);
    end;
  end;
  writeln('done.');



  Gotoxy(1,30);
  Write('Press any Key for exit.');
  Readkey();
end.

 

Jemand eine Idee, was ich falsch mache? Oder woran das liegen könnte?

 

Ich habe diese Frage schon einmal hiergestellt und dort wurde mir emphole hier noch mal zu fragen.

 

LG
Thandor

Hallo,

um die Admin Api anzusprechen muss die Version der Api mit übergeben werden /api/{version}/manufacturers =>

writeln(client.Get(baseURL + '/api/v1/manufacturers'));

LG,BA

 

Hallo B_A,

auch mit der Version (baseURL + ‘/api/v1/manufacturers’) bleibt das Verhalten leider das Selbe. code 408 Timeout.

LG
Thandor

Hallo,

ich musste selbst mal in meiner Implementierung nachschauen. Der Endpoint heißt nicht manufacturers sondern product-manufacturer. Ich bekomme, wenn ich einen falschen Endpoint anspreche, aber einen 404 zurück.

writeln(client.Get(baseURL + '/api/v1/product-manufacturer'));

LG, BA

Hallo,

bleibt leider auch so beim 408.

LG
Thandor

Hallo,

ich würde es mal per cURL ausprobieren. Ich kenne mich jetzt nicht mit FreePascal aus, aber könnte es sein, dass der Connection Timeout zu niedrich eingestellt ist?

curl --location --request GET 'server-ip/api/v1/product-manufacturer' \
--header 'Authorization: Bearer meinToken'

LG, BA

Hallo,

ja, mit dem bekomme ich ein Ergebnis:

curl -L -X GET „http://[…]/api/v1/product-manufacturer“ \ -H „Authorization:  Bearer eyJ0eXA[…]w“

Also muss ich schauenm, was an meinem Programm nicht stimmt… Komisch, dass ich andere APIS ansprechen kann (Auch welche, die eine Authorization verlangen).

Aber dennoch Danke erst mal.

LG
Thandor