[PHP] Location-header van response ophalen lukt niet

Pagina: 1
Acties:

Vraag


Acties:
  • 0 Henk 'm!

  • DynamicDreams
  • Registratie: Juni 2004
  • Laatst online: 06-06 15:17
Ik doe met PHP via CURL een POST naar een $url. Als reactie krijg ik in de header een 'Location' terug die ik nodig heb. Ik moet namelijk een GET-request doen naar die location om aanvullende info op te halen.

Het lukt mij met geen mogelijkheid om die location-data uit de header van het eerste verzoek te krijgen. De variabelen blijven leeg.

Dit is mijn script:
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
// cURL initialization
$ch = curl_init();

// cURL options
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $metadataJson);

if (!empty($headers)) {
    curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
}

// Perform the POST request
$response = curl_exec($ch);

// Get the request headers
$requestHeaders = curl_getinfo($ch, CURLINFO_HEADER_OUT);

// Get the HTTP status code
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);

// If there is an error, display it
if ($response === false) {
    echo 'cURL error: ' . curl_error($ch);
}

// Display the request headers
echo "Request Headers:\n";
echo $requestHeaders;

// Display the response headers
echo "Response Headers:\n";
list($responseHeaders, $responseBody) = explode("\r\n\r\n", $response, 2);
echo $responseHeaders;

// Display the response body
echo "Response Body:\n";
echo $responseBody;

// Close the cURL connection
curl_close($ch);



En dit zijn de headers die ik in Boomerang (soort van Postman) terugkrijg als ik via die tool een POST-request doe. De POST-request uit mijn script doet het overigens wel, want er wordt wel wat aangemaakt in mijn database.

Afbeeldingslocatie: https://tweakers.net/i/avR9uiTpkGTn1kLDxp93O_Rvco8=/800x/filters:strip_exif()/f/image/eH6jFaQVXSB7Sl46otJJkLtw.png?f=fotoalbum_large

Waar maak ik een denkfout? Ik heb al verschillende aanpakken geprobeerd, maar allen zonder resultaat.

[ Voor 5% gewijzigd door RobIII op 23-10-2023 11:54 . Reden: Code ontdaan van een boel onnodige indenting ]

12x JA Solar 375 Wp op oost-west met Goodwe GW3600D-NS

Beste antwoord (via DynamicDreams op 23-10-2023 13:01)


  • Groentjuh
  • Registratie: September 2011
  • Laatst online: 06-06 19:40
Mis je niet de optie:

code:
1
CURLOPT_HEADER

Die het volgende doet: "true to include the header in the output. "

Alle reacties


Acties:
  • 0 Henk 'm!

Anoniem: 1777010

De kans is vrij groot dat Curl de header al gevolgd heeft, dus dan zit Curl al bij de eindbestemming en daar is geen location header.

Acties:
  • 0 Henk 'm!

  • DogEatsDog
  • Registratie: December 2010
  • Laatst online: 13:26
Zou je niet uit kunnen met het gebruik van
code:
1
CURLOPT_FOLLOWLOCATION
zodat je meteen de redirect als response krijgt?

Acties:
  • Beste antwoord
  • +1 Henk 'm!

  • Groentjuh
  • Registratie: September 2011
  • Laatst online: 06-06 19:40
Mis je niet de optie:

code:
1
CURLOPT_HEADER

Die het volgende doet: "true to include the header in the output. "

Acties:
  • 0 Henk 'm!

  • Thijsmans
  • Registratie: Juli 2001
  • Laatst online: 06-06 22:28

Thijsmans

⭐⭐⭐⭐⭐ (5/5)

Eens met @Groentjuh; heb je wel gecheckt of $responseHeaders uberhaupt wel waarden bevat?

Privacy-adepten vinden op AVGtekst.nl de Nederlandse AVG-tekst voorzien van uitspraken en besluiten.


Acties:
  • +1 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
@Anoniem: 1777010 heeft vrijwel zeker gelijk, cURL volgt standaard redirects. Dat kun je uitzetten door, zoals @DogEatsDog aangeeft, CURLOPT_FOLLOWLOCATION op false te zetten. Maar dan ga je de header niet krijgen tenzij je, zoals @Groentjuh aangeeft, CURLOPT_HEADER op true zet.

Dat is overigens allemaal prima te vinden in de documentatie ;)

Edit: correctie: cURL volgt standaard niet redirects. My bad.

Maar doe jezelf een lol en mik heel dat geklooi met "low level cURL" overboord en overweeg iets als Guzzle o.i.d.

[ Voor 36% gewijzigd door RobIII op 23-10-2023 12:04 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij

Pagina: 1