Server-to-server
Ik ben nu aan het kijken naar een manier waardoor ik een formulier op mijn (of iemand anders) site kan invullen, laten uitvoeren en het resultaat kan laten ophalen. Helaas lukt mij dit niet helemaal.
Na veel zoekpogingen op google kom ik uit bij het volgende script:
Code (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
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
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
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
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
<?php
function httpSocketConnection($host, $method, $path, $data)
{
global $Db;
$method = strtoupper($method);
if ($method == "GET")
{
$path.= '?'.$data;
}
$filePointer = fsockopen($host, 80, $errorNumber, $errorString);
if (!$filePointer)
{
throw new Exception("Chyba spojeni $errorNumber $errorString");
}
$requestHeader = $method." ".$path." HTTP/1.1\r\n";
$requestHeader.= "Host: ".$host."\r\n";
$requestHeader.= "User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1) Gecko/20061010 Firefox/2.0\r\n";
$requestHeader.= "Content-Type: application/x-www-form-urlencoded\r\n";
if ($method == "POST")
{
$requestHeader.= "Content-Length: ".strlen($data)."\r\n";
}
$requestHeader.= "Connection: close\r\n\r\n";
if ($method == "POST")
{
$requestHeader.= $data;
}
fwrite($filePointer, $requestHeader);
$responseHeader = '';
$responseContent = '';
do
{
$responseHeader.= fread($filePointer, 1);
}
while (!preg_match('/\\r\\n\\r\\n$/', $responseHeader));
if (!strstr($responseHeader, "Transfer-Encoding: chunked"))
{
while (!feof($filePointer))
{
$responseContent.= fgets($filePointer, 128);
}
}
else
{
while ($chunk_length = hexdec(fgets($filePointer)))
{
$responseContentChunk = '';
$read_length = 0;
while ($read_length < $chunk_length)
{
$responseContentChunk .= fread($filePointer, $chunk_length - $read_length);
$read_length = strlen($responseContentChunk);
}
$responseContent.= $responseContentChunk;
fgets($filePointer);
}
}
return chop($responseContent);
}
echo httpSocketConnection('localhost', 'POST', '/posts.php', 'invullen=hoi&invullen2=ja');
?>
function httpSocketConnection($host, $method, $path, $data)
{
global $Db;
$method = strtoupper($method);
if ($method == "GET")
{
$path.= '?'.$data;
}
$filePointer = fsockopen($host, 80, $errorNumber, $errorString);
if (!$filePointer)
{
throw new Exception("Chyba spojeni $errorNumber $errorString");
}
$requestHeader = $method." ".$path." HTTP/1.1\r\n";
$requestHeader.= "Host: ".$host."\r\n";
$requestHeader.= "User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1) Gecko/20061010 Firefox/2.0\r\n";
$requestHeader.= "Content-Type: application/x-www-form-urlencoded\r\n";
if ($method == "POST")
{
$requestHeader.= "Content-Length: ".strlen($data)."\r\n";
}
$requestHeader.= "Connection: close\r\n\r\n";
if ($method == "POST")
{
$requestHeader.= $data;
}
fwrite($filePointer, $requestHeader);
$responseHeader = '';
$responseContent = '';
do
{
$responseHeader.= fread($filePointer, 1);
}
while (!preg_match('/\\r\\n\\r\\n$/', $responseHeader));
if (!strstr($responseHeader, "Transfer-Encoding: chunked"))
{
while (!feof($filePointer))
{
$responseContent.= fgets($filePointer, 128);
}
}
else
{
while ($chunk_length = hexdec(fgets($filePointer)))
{
$responseContentChunk = '';
$read_length = 0;
while ($read_length < $chunk_length)
{
$responseContentChunk .= fread($filePointer, $chunk_length - $read_length);
$read_length = strlen($responseContentChunk);
}
$responseContent.= $responseContentChunk;
fgets($filePointer);
}
}
return chop($responseContent);
}
echo httpSocketConnection('localhost', 'POST', '/posts.php', 'invullen=hoi&invullen2=ja');
?>
testformulier:
Code (php)
<form action="" method="POST">
<input type="text" name="invullen" />
<input type="text" name="invullen2" />
<input type="submit" value="Submit" />
</form>
Resultaat van uitvoeren php script:
Fatal error: Maximum execution time of 60 seconds exceeded in K:\System\xampp\htdocs\posts.php on line 46
Ik wil niet dat het te lang duurt ;)
Mijn vraag is: Weet iemand hoe dit mogelijk is ZONDER cURL? Gebruik ik dit script verkeerd, of moet ik iets anders proberen?
Code (php)
1
2
3
4
2
3
4
<?php
// 120 seconden.
$filePointer = fsockopen($host, 80, $errorNumber, $errorString, 120);
?>
// 120 seconden.
$filePointer = fsockopen($host, 80, $errorNumber, $errorString, 120);
?>
CURL werkt veel makkelijker overigens.
Gewijzigd op 07/12/2010 00:19:23 door - Ariën -
Waarom zonder cURL? Als je hoster dit niet support wordt het hoog tijd om naar een andere hoster te gaan en/of een VPS aan te schaffen ;-)
Hoster? Xampp usb versie ondersteund gewoon geen curl ;)
Dan voeg je het toch lekker toe?
Nou, weet je, ik heb eventjes gekeken bij de site van curl, en ik zou werkelijk niet weten wat ik met zon pakket moet doen :o
Dan installeer je een fatsoenlijker programma? Wamp, zend server.. Allemaal cURL ondersteuning =)
Gerben pHp op 07/12/2010 17:19:36:
Nou, weet je, ik heb eventjes gekeken bij de site van curl, en ik zou werkelijk niet weten wat ik met zon pakket moet doen :o
Installeren? Ze hebben vast wel een handleiding?
Ook al naar gekeken ;)
En? Wat is er uit gekomen?
Niets :o
En heb je al wat geprobeert?
Chris Horeweg op 07/12/2010 17:50:35:
Dan installeer je een fatsoenlijker programma? Wamp, zend server.. Allemaal cURL ondersteuning =)
Dit toevallig al gedaan? ;-)
Gerben pHp op 07/12/2010 20:48:55:
Niets :o
Leg uit.