POST I: Een formulier verzenden

Normale formulieren gebruiken voor het body gedeelte van een request
het data type application/x-www-form-urlencoded. Dit betekent simpel
gezegd dat in de data er staat als een url geëncodeerde query string.
Dat is dus:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
var=inhoud&anderevar=andereinhoud

In een POST request komen er dus sowieso twee headers bij,
Content-Length en Content-Type. De eerste is de lengte van het body
gedeelte en de tweede het data type daarvan,
application/x-www-form-urlencoded dus. Als je dus een variabele iets
met daarin hoi en een variabele niets met doei wilt versturen krijg je
dus:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
POST /example.php HTTP/1.1
Host: www.example.org
Connection: close
User-Agent: LegolasWeb Socket Browser 1.0.2
Content-Type: application/x-www-form-urlencoded
Content-Length: 19

iets=hoi&niets=doei

Als we dit toepassen in het GET script dat we eerder hebben gezien, en
natuurlijk vooral niet vergeten de variabelen te encoderen, krijgen we
zoiets:
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
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
<?php

// Nodige informatie
define('SERVER', 'www.example.org');
define('PORT', 80);
define('PATH', '/example.php');

// Versie
define('VERSION', '1.0');

// End of line
define('_EOL', "\r\n");

// Data
$data = array('test' => 'wiej!', 'fiets' => 'pomp', '35@&%' => '?&=');

// Maak een socket
$sock = socket_create(AF_INET, SOCK_STREAM, 0);
if (!$sock) {
       echo 'Fatal error: Couldn\'t create socket';
       exit;
}


// Maak verbinding
if (!socket_connect($sock, SERVER, PORT)) {
       echo 'Fatal error: Couldn\'t connect';
       exit;
}


// Maak het body stuk
$body = null;
foreach ($data as $var => $content) {
       if ($body != null) {
               $body .= '&';
       }

       $body .= rawurlencode($var) . '=' . rawurlencode($content);
}


// Maak het request
$request = null;
$request .= 'POST ' . PATH . ' HTTP/1.0' . _EOL;
$request .= 'Host: ' . SERVER . _EOL;
$request .= 'User-Agent: LegolasWeb WebBrowserDemo ' . VERSION . _EOL;
$request .= 'Content-Type: application/x-www-form-urlencoded' . _EOL;
$request .= 'Content-Length: ' . strlen($body) . _EOL;
$request .= _EOL;
$request .= $body;

// En verstuur het
if (!socket_send($sock, $request, strlen($request), 0)) {
       echo 'Fatal error: Couldn\'t send request';
       exit;
}


// Haal de response op
$output = null;
$buffer = null;
while (socket_recv($sock, $buffer, 1024, 0) != 0) {
       $output .= $buffer;
}


// Isoleer het body gedeelte en toon het
$output = explode(_EOL . _EOL, $output);
$output = $output[1];
echo $output;

?>

Met dit alles heb je al helemaal zeker een goede basis voor HTTP, maar
er is altijd nog wel meer, dus gaan we snel verder met het 2e POST
gedeelte, multipart/form-data.

« Lees de omschrijving en reacties

Inhoudsopgave

  1. Inleiding
  2. Basiskennis HTTP
  3. GET: Een pagina opvragen
  4. POST I: Een formulier verzenden
  5. POST II: Bestanden uploaden
  6. De response headers en status
  7. Proxies
  8. En nu?

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.