GET en POST requests

Een browser (of jij, met php of telnet, o.i.d.) kan twee soorten HTTP requests maken: GET en POST.
Even voor de duidelijkheid: ELKE pagina die je opent is het resultaat van een GET of POST request. We kennen allemaal wat een POST request doet. Of toch niet!? Een form heeft twee "methods": GET of POST :) We gebruiken method POST om 'grote' hoeveelheden data met een form te versturen. Wat we eigenlijk doen dan, is een POST request maken, met een aantal parameters.
Wanneer we een GET request maken, zonder parameters, openen we gewoon een pagina. Als je naar www.google.nl surft maak je een GET request zonder parameters.

een GET request
De eerste regel van een HTTP request is de methode, de http versie en de locatie. Een voorbeeld:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
GET / HTTP/1.1


Ziet er makkelijk uit he :) Maar wat gebeurt er!? Duidelijk... een GET request naar /. Dat is vaak index.php, maar dat is nog niet interessant.
Een request moet, net zoals een response, bestaan uit een status regel en een aantal headers. Een voorbeeld :)
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
POST /external_socket.php HTTP/1.1
Host: www.jouwmoeder.nl
Content-Type: application/x-www-form-urlencoded
Content-Length: 3
Connection: Close

Zoals je ziet is er een header Content-Length. Die zegt hoeveel data er wordt verstuurd. Als je een GET request maakt is dit niet nodig.
Omdat er 3 bytes verstuurd worden volgens ons, moeten we iets verzinnen ;)
Een voorveeld "data blok" zou kunnen zijn:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
c=6


Dit ontvang je in external_socket.php als $_POST['c']. Zo makkelijk is het.
Als meerdere variabelen wil sturen moet je die scheiden met een ampersand (&). Denk er aan om altijd je waarden te urlencoden! Maar alleen je waarden! Niet de var namen. Bijvoorbeeld:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
<?php

$szHTTPData
= "naam=" . urlencode("rudie") . "&wachtwoord=" . urlencode("met spatie+s/< en meer");

?>


Nu gaan we nog even snel een request sturen en data ontvangen :)
Ik gebruik als server "www.jouwmoeder.nl" en als script "/external_socket.php"
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
<?php

$server
= "www.jouwmoeder.nl";
$script = "/external_socket.php";

// Maak socket - ik ga er van uit dat het lukt, dus geen error afhandeling :)
$sock = fsockopen($server, 80);
if ( $sock )
{

    $szParams = "user=rudie&pass=" . urlencode("mijn wachtwoord");

    $headers = "POST ".$script." HTTP/1.1\r\n";
    $headers.= "Content-Type: application/x-www-form-urlencoded\r\n";
    $headers.= "Content-Length: ".strlen($szParams)."\r\n";
    $headers.= "Connection: Close";
    $headers.= "\r\n"; // met een extra 'open regel' maken we http duidelijk dat de headers afgelopen zijn

    // En nu http headers naar de server schrijven

    fwrite($sock, $headers);
    fwrite($sock, $szParams);

    // En minstens zo belangrijk, headers (en meer) ophalen en opslaan
    $output = "";
    while ( !feof($sock) )
    {

        $output .= fread($sock, 4096);
    }


    // $output bestaat nu uit twee onderdelen: Headers en Data
    // Om uit elkaar te houden: headers is TOT de eerste open regel, dus \r\n\r\n

    list($headers, $body) = explode("\r\n\r\n", $output, 2);

    // Maar we printen even alles voor de duidelijkheid
    echo $output;
}


?>


Als ik dat probeer zal mijn venster dit printen:

HTTP/1.1 200 OK
Date: Mon, 16 Oct 2006 20:11:39 GMT
Server: Apache/2.0.54 (Debian GNU/Linux) FrontPage/5.0.2.2635 mod_python/3.1.3 Python/2.3.5 PHP/4.4.1-0.dotdeb.3 mod_ssl/2.0.54 OpenSSL/0.9.7e mod_perl/1.999.21 Perl/v5.8.4
X-Powered-By: PHP/4.4.1-0.dotdeb.3
secret1: geheime shit
secret2: Array();\n!scalar
secret1: meer geheimes
Content-Length: 96
Connection: close
Content-Type: text/plain

METHOD: POST

GET:
Array
(
)

POST:
Array
(
[user] => rudie
[pass] => mijn wachtwoord
)

« Lees de omschrijving en reacties

Inhoudsopgave

  1. De functies
  2. HTTP Requests! Nieuw?
  3. GET en POST requests
  4. Duidelijkheid en verwerking
  5. secrets in http headers
  6. Afsluiting
  7. request
  8. request
  9. response
  10. response

PHP tutorial opties

 
 

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.