CURL commando "omzetten" om in PHP te gebruiken

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Sjef dresen

sjef dresen

17/03/2021 11:08:56
Quote Anchor link
Beste allemaal,

Van een website heb ik deze 2 stukjes code gehaald:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
curl -X POST https://192.168.1.2/api/auth/login -H "Content-Type: application/json" --insecure -d '{"username":"YOURUSER", "password":"YOURPASS"}' -c /tmp/cookies.txt 2>&1 -k --silent > /dev/null


en:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
curl "https://192.168.1.2/proxy/protect/api/bootstrap" -H 'Cookie: TOKEN=' --cookie /tmp/cookies.txt --cookie-jar /tmp/cookies.txt -H 'Upgrade-Insecure-Requests: 1' 2>&1 -k --silent


Dit lijkt me op CURL code die je op de een of andere manier in een soort "Command line" moet uitvoeren?
Ik zou dit echter graag in PHP doen, maar ik weet helaas niet hoe ik dit moet "omzetten" zodat ik er standaard "PHP CURL" van kan maken.

Normaal gebruik ik daar bijvoorbeeld iets zoals onderstaand voor:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
<?php
$handle
= curl_init();
 
$url = "https://localhost/curl/theForm.php";
 
// Array with the fields names and values.
// The field names should match the field names in the form.

 
$postData = array(
  'firstName' => 'Lady',
  'lastName'  => 'Gaga',
  'submit'    => 'ok'
);
 
curl_setopt_array($handle,
  array(
     CURLOPT_URL => $url,
     // Enable the post response.
    CURLOPT_POST       => true,
    // The data to transfer with the response.
    CURLOPT_POSTFIELDS => $postData,
    CURLOPT_RETURNTRANSFER     => true,
  )
);

 
$data = curl_exec($handle);
 
curl_close($handle);
 
echo $data;
[
/code]

Weet iemand hoe ik dit moet aanpakken?

Alvast vriendelijk bedankt!

Grtz,

Sjef
 
PHP hulp

PHP hulp

16/04/2024 08:04:18
 
Rob Doemaarwat

Rob Doemaarwat

17/03/2021 12:32:38
 
- Ariën  -
Beheerder

- Ariën -

17/03/2021 12:33:29
Quote Anchor link
Je zit al aardig in de buurt. Als je nog nog even je content-type in meegeeft als header.
 
Sjef dresen

sjef dresen

17/03/2021 12:56:34
Quote Anchor link
Rob Doemaarwat op 17/03/2021 12:32:38:


Wow! Das een mooie/handige hulp tool! Thanks.

Hij werkt in dit geval alleen niet helemaal, want het hele "cookie-gedeelte" wordt niet meegenomen...

Dit is namelijk de "uitkomst" van de tool:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
// Generated by curl-to-PHP: http://incarnate.github.io/curl-to-php/
$ch = curl_init();

curl_setopt($ch, CURLOPT_URL, 'https://192.168.1.3/api/auth/login');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, "{\"username\":\"YOURUSER\", \"password\":\"YOURPASS\"}");

$headers = array();
$headers[] = 'Content-Type: application/json';
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);

$result = curl_exec($ch);
if (curl_errno($ch)) {
    echo 'Error:' . curl_error($ch);
}
curl_close($ch);



@Ariën:

Thanks! Dat gaat gelukkig wel goed bij het omzet-script uit de link van Rob :-)

Klopt het dat ik beide CURL-commando's achter elkaar moet uitvoeren om het werkend te krijgen?
Dus eerst de bovenste (om in te loggen) en meteen daarna (gebruik makende van de cookies die zojuist zijn aangemaakt) om de data uit "proxy/protect/api/bootstrap" te halen?

Mvg,

Sjef
 
- Ariën  -
Beheerder

- Ariën -

17/03/2021 13:00:12
Quote Anchor link
Alle headers die in één request gaan, kun je in de header-array stoppen.
 
Sjef dresen

sjef dresen

17/03/2021 13:06:16
Quote Anchor link
Bedoel je daarmee dat je deze 2 "aanroepen" in één opdracht kunt doen?


Toevoeging op 17/03/2021 20:56:10:


Inmiddels (al letterlijk de hele dag ermee bezig :-P) ben ik alweer iets verder...

Met onderstaand PHP-script krijg ik data terug waarvan ik zéker weet dat het inloggen is gelukt:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
<?php

$ch
= curl_init();


$data = json_encode(array(
"username"  => "testUser",
"password" => "wachtwoord"
));

curl_setopt($ch, CURLOPT_VERBOSE, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);

curl_setopt($ch, CURLOPT_URL, 'https://192.168.1.100:7443/api/auth');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 0);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
curl_setopt($ch, CURLOPT_COOKIESESSION, true );
curl_setopt($ch, CURLOPT_COOKIEJAR, 'cookies.txt');
curl_setopt($ch, CURLOPT_COOKIEFILE, 'cookies.txt');

$headers = array();
$headers[] = 'Content-Type: application/json';
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);

$result = curl_exec($ch);
if (curl_errno($ch)) {
    echo 'Error:' . curl_error($ch);
}

curl_close($ch);

?>



Het grote probleem is alleen dat ik nergens de cookies (cookies.txt) kan terugvinden?!
En deze heb ik volgens mij wel nodig bij de volgende stap, namelijk het ophalen van de data uit https://192.168.1.100/proxy/protect/api/bootstrap

Weet kan me helpen om te achterhalen waarom de cookies nergens te vinden zijn?
Ik gebruik PHP op een Synology NAS.

Alvast bedankt.

Gr,

Sjef
 
Sjef dresen

sjef dresen

18/03/2021 18:09:11
Quote Anchor link
Iemand?
Er zouden toch cookies moeten worden aangemaakt als het CURL-request goed gaat, of niet?
Ik ben hier niet echt in thuis, dus alle hulp is van harte welkom.

Gr,

Sjef
 
- Ariën  -
Beheerder

- Ariën -

18/03/2021 19:25:09
Quote Anchor link
heb je het bestand wel aangemaakt?
 
Sjef dresen

sjef dresen

18/03/2021 19:53:54
Quote Anchor link
Welk bestand bedoel je?

Ik heb 't PHP-script aangemaakt, en zodra ik dat run komt er data terug waardoor ik met 100% zekerheid weet dat ik in de goede richting zit. Er komt namelijk data terug die je normaal alleen kunt zien als je ingelogd bent (persoonlijke gegevens, etc...)

Dus daarmee is het eerste CURL-commando uit de TS al redelijk klaar. Ik mis alleen nog het cookie verhaal. Na het runnen van dit script zouden er cookies moeten komen: /tmp/cookies.txt maar die kan ik nergens vinden... ook niet als ik alleen "cookies.txt" gebruik. Ik zou verwachten dat deze dan in dezelfde directory als het PHP-script staat komen, maar klopt dat wel? Of komen die cookies TOTAAL ergens anders? Bijvoorbeeld in de directory waar PHP zich zelf bevind ofzo? (ik heb geen idee waar dat is, maar zoiets zou ik me kunnen voorstellen!)

Hoe dan ook: ik kan cookies.text nergens vinden, en daardoor kan ik dus ook het 2e commando niet uitvoeren, want dat maakt gebruik van die cookies...

Dus ik ben echt zeer benieuwd hoe jullie zit zouden oplossen? :-)

Thanks!

Gr,

Sjef
Gewijzigd op 18/03/2021 19:54:41 door sjef dresen
 
- Ariën  -
Beheerder

- Ariën -

18/03/2021 20:39:43
Quote Anchor link
Misschien dat bestand zelf aanmaken?
 
Sjef dresen

sjef dresen

18/03/2021 20:42:05
Quote Anchor link
Nee, een cookie-bestand moet aangemaakt worden door het script zelf.
Het heeft geen nut om dit eerst zelf aan te maken helaas...
 
Thom nvt

Thom nvt

19/03/2021 07:46:03
Quote Anchor link
Probeer eens een absoluut pad op te geven voor je Cookiejar.
Nu word het relatief aan het uitvoerpad opgeslagen (waarschijnlijk je index.php).

Als je een absoluut pad gebruikt (bijv. /tmp/cookiejar.txt) heb je meer controle over de permissies op die directory en kun je controleren of PHP daar mag schrijven.

Houd ook rekening met het volgende:
Quote:
The name of a file to save all internal cookies to when the handle is closed, e.g. after a call to curl_close.

https://www.php.net/manual/en/function.curl-setopt.php
 
Sjef dresen

sjef dresen

19/03/2021 07:58:48
Quote Anchor link
Bedankt voor je reactie.

Ik heb ook relatieve paden geprobeerd. Maar ook dan zie ik geen cookies...
Of moet ik écht in die /volume1/www/ (etc...) directory's gaan zitten rommelen? (dus met Putty op de NAS inloggen enzo?)

Wat betreft de curl_close: die doe ik netjes helemaal achteraan, dus dat zou geen probleem moeten zijn...
 
Thom nvt

Thom nvt

19/03/2021 08:08:33
Quote Anchor link
Ik zou inderdaad eens proberen om het absolute pad op te geven (zoiets als /volume1/www/..../cookiejar.txt dus).
Het klinkt alsof er óf geen cookies zijn om weg te schrijven óf PHP niet de benodigde permissies heeft om het in die folder te zetten óf het bestand ergens komt waar je het niet verwacht.

In het geval van een permissie probleem verwacht ik wel een error of warning in het PHP log, staat daar wellicht iets nuttigs in?
 
Sjef dresen

sjef dresen

19/03/2021 08:59:00
Quote Anchor link
Hmzzzz, ik zie nu dat bij een andere (maar soortgelijke) aanroep alles omtrent het "cookie-verhaal" wél goed gaat...
De cookies worden gewoon netjes in dezelfde directory opgeslagen.

Het lijkt erop dat er dus bij de aanroep iets mis gaat... Ik gebruik een verkeerde URL, of weet ik wat.
Maar het is denk ik niet iets dat hier op dit forum kan worden opgelost, maar meer op het forum van de fabrikant van het apparaat waarop in probeer in te loggen...

Thanks voor de hulp!

Mvg,

Sjef
 
Thom nvt

Thom nvt

19/03/2021 09:03:01
Quote Anchor link
Je kan met cURL via de commandline eens proberen of je überhaupt cookies terugkrijgt.
Als je liever een grafische UI hebt kan ik Postman van harte aanraden.
Succes!
 
Sjef dresen

sjef dresen

19/03/2021 09:03:36
Quote Anchor link
Thanks!
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.