Hi all,
Ik loop tegen een vaag probleem aan, ik wil een kleine wrapper maken voor communicatie met een externe api. Laravel heeft daar tegenwoordig een mooie Http client (Guzzle wrapper) voor.
Het issue: ik moet eerst een authenticatie token (Bearer) opvragen. Dat gaat prima. Die token gebruik ik vervolgens voor alle calls die daarna volgen. Kleine class:
En vervolgens simpel een call naar getProducts
Exact deze opzet geeft een vage response (html body met foutmelding) van de end server terug.Het aanvragen van de token werkt echter goed. De token wordt óók correct als Authorization: Bearer XXX meegegeven als header bij de getProducts/sendRequest call.
Ik zou eerst denken dat de token wordt niet goed meegestuurd werd oid met de getProducts call. Dus handmatig een token ingevoerd:
Gek genoeg werkt dit niet. Als ik de regel met generateAuthToken verwijder, werkt het wel

Het lijkt dus dat die Http call in de generateAuthToken een soort van delay veroorzaakt?
Na een beetje aanklooien lijkt dit gek genoeg te werken met de originele opzet:
Maar dat is natuurlijk geen doen
Ik heb heel de documentatie uitgepluisd en ook nog de interne source code bekeken, maar ik snap niet waar dit probleem vandaan komt. Een snelle oplossing is natuurlijk gewoon zelf cURL te gebruiken, maar ik wil gewoon weten waar dit probleem vandaan komt
Iemand van jullie die hier meer van weet toevallig?
Ik loop tegen een vaag probleem aan, ik wil een kleine wrapper maken voor communicatie met een externe api. Laravel heeft daar tegenwoordig een mooie Http client (Guzzle wrapper) voor.
Het issue: ik moet eerst een authenticatie token (Bearer) opvragen. Dat gaat prima. Die token gebruik ik vervolgens voor alle calls die daarna volgen. Kleine class:
PHP:
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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
| <?php namespace App\Service; use Illuminate\Http\Request; use Illuminate\Support\Facades\Http; class MyApiClient { private const AUTH_ENDPOINT = '/auth/token'; private string $url; private string $token; public function __construct() { $this->url = config('apps.service.api_rest_url'); // Token opvragen en instellen $this->token = $this->generateAuthToken('username', 'password'); } public function generateAuthToken($username, $password) { $response = Http::acceptJson()->post($this->url.self::AUTH_ENDPOINT, [ 'username' => $username, 'password' => $password ]); // Deze call werkt altijd, geeft altijd een geldige token terug. return $response->json(); } private function sendRequest($endpoint) { $url = $this->url.$endpoint; // $this->token geeft ALTIJD correct de token terug, ook bij calls waarbij de end server een (fout)melding geeft $response = Http::withToken($this->token)->get($url); return $response->json(); } public function getProducts() { return $this->sendRequest('/products'); } } |
En vervolgens simpel een call naar getProducts
PHP:
1
2
3
| $client = new MyApiClient(); $products = $client->getProducts(); |
Exact deze opzet geeft een vage response (html body met foutmelding) van de end server terug.Het aanvragen van de token werkt echter goed. De token wordt óók correct als Authorization: Bearer XXX meegegeven als header bij de getProducts/sendRequest call.
Ik zou eerst denken dat de token wordt niet goed meegestuurd werd oid met de getProducts call. Dus handmatig een token ingevoerd:
PHP:
1
2
3
4
5
6
7
8
9
10
| public function __construct() { $this->url = config('apps.service.api_rest_url'); // Token opvragen/instellen $this->token = $this->generateAuthToken('username', 'password'); // Handmatig overriden $this->token = '2342jrfsgnjdgkkdf' } |
Gek genoeg werkt dit niet. Als ik de regel met generateAuthToken verwijder, werkt het wel


Het lijkt dus dat die Http call in de generateAuthToken een soort van delay veroorzaakt?
Na een beetje aanklooien lijkt dit gek genoeg te werken met de originele opzet:
PHP:
1
2
3
4
5
| $client = new MyApiClient(); sleep(1); $products = $client->getProducts(); |
Maar dat is natuurlijk geen doen
Ik heb heel de documentatie uitgepluisd en ook nog de interne source code bekeken, maar ik snap niet waar dit probleem vandaan komt. Een snelle oplossing is natuurlijk gewoon zelf cURL te gebruiken, maar ik wil gewoon weten waar dit probleem vandaan komt

Iemand van jullie die hier meer van weet toevallig?