[PHP] Website gebruiken als API

Pagina: 1
Acties:

Acties:
  • 0 Henk 'm!

  • Carharttguy
  • Registratie: Juli 2010
  • Laatst online: 04-07 23:09
Hallo iedereen

Ik wil een website gebruiken als API, die geen API heeft. Ik ben wat gaan Googlen om POST requests te doen vanuit PHP, en ik denk dat ik al iets heb. Maar ik zit vast met de headers. (denk ik)

Ik heb nu zoiets:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
$url = 'xxxxxxx';
                $data = array('email_address' => 'test@test.be',
                              'terms_and_privacy_box' => 'on',
                              );
                
                $options = array(
                    'http' => array(
                        'header'  => "",
                        'method'  => 'POST',
                        'content' => http_build_query($data),
                    ),
                );
                $context  = stream_context_create($options);
                $result = file_get_contents($url, false, $context);
                
                var_dump($result);


Maar ik weet dus niet goed wat ik met de headers moet doen. Dit zijn de headers volgens Tamper Data:

http://i.imgur.com/85vPxkz.png

Ik denk dat ik de 'normale' headers wel na mekaar kan zetten als:
Host: xxxx\r\n
User-Agent: Mozilla/5.0 blablablabla\r\n

Maar wat met de Cookie header?
Hoe simuleer ik die? Moet ik dan met m'n PHP script zo'n cookie header verkrijgen door eerst een andere request te doen ofzo?

Dankjewel

Acties:
  • 0 Henk 'm!

  • orf
  • Registratie: Augustus 2005
  • Laatst online: 00:17

orf

Je kunt beter curl of een http-client class (die onder water meestal ook curl gebruikt) gebruiken. Daar zit meestal al een cookiejar e.d. in.

Guzzle bijvoorbeeld. De http-client van Zend Framework is ook ok. :)

Acties:
  • 0 Henk 'm!

  • Carharttguy
  • Registratie: Juli 2010
  • Laatst online: 04-07 23:09
Ik ben door de documentation van Guzzle aan het gaan, en merk dat ze een website als 'cookiejar' (had nog nooit van die term gehoord) gebruiken. namelijk deze: http://httpbin.org/cookies

Dat is al een goed startpunt, al merk ik 2 dingen op:
-HTTPbin.org/cookies geeft mij een andere _ga waarde dan de website die ik bezoek. Is dit een probleem?
-Ik krijg van HTTPbin geen JSESSIONID terug. Waar kan men deze vinden?

Acties:
  • 0 Henk 'm!

  • orf
  • Registratie: Augustus 2005
  • Laatst online: 00:17

orf

http://httpbin.org is een voorbeeld, :)
Vervang http://httpbin.org/cookies met je eigen url.

PHP:
1
2
3
// Use a shared client cookie jar
$client = new \GuzzleHttp\Client(['cookies' => true]);
$r = $client->get('http://httpbin.org/cookies');


De client regelt cookies dan zelf. Bij volgende requests worden de cookies meegestuurd.

Acties:
  • 0 Henk 'm!

  • Carharttguy
  • Registratie: Juli 2010
  • Laatst online: 04-07 23:09
Handig dat Guzzle zelf de cookies regelt. Ik ga er mee aan de slag!

Acties:
  • 0 Henk 'm!

  • Barryvdh
  • Registratie: Juni 2003
  • Laatst online: 10-10 23:00
Je kan ook Goutte (https://github.com/FriendsOfPHP/Goutte) gebruiken. Die gebruikt ook Guzzle (met cookies), maar maakt het wat makkelijker om links/formulieren te volgen.

PHP:
1
2
3
4
5
6
7
$crawler = $client->request('GET', 'http://github.com/');
$crawler = $client->click($crawler->selectLink('Sign in')->link());
$form = $crawler->selectButton('Sign in')->form();
$crawler = $client->submit($form, array('login' => 'fabpot', 'password' => 'xxxxxx'));
$crawler->filter('.flash-error')->each(function ($node) {
    print $node->text()."\n";
});
Pagina: 1