youdontcare | j'avais galéré tel le dingue pour faire du post en php (sur nexen). en plus, pas des masses de docs là dessus , et un bug chelou. au cas où, voici une proc qui marche pour une requête post de nexen -> altern (c'est du php, facilement convertible en c)
host = une adresse ip ou un nom de domaine
postfile = le chemin sur le serveur cible (/myDir/myPost.php)
varname = le nom de la variable
vardata = son contenu
ça ne gère donc qu'une seule variable, je galérais déjà bien assez comme ça même si j'en passe plusieurs, que je récupère à coups d'explode() sur le serveur cible.
Code :
- //
- // Send a request and return its response
- //
- function HTTPRequest($targethost, $request)
- {
- global $socket;
- // If targethost is a dns string, get its IP
- if (!ereg("[0-255].[0-255].[0-255].[0-255]", $targethost)) $address = gethostbyname ($targethost);
- else $address = $targethost;
- // Get the port for the WWW service
- $service_port = getservbyname ('www', 'tcp');
- // Create a TCP/IP socket
- $socket = socket (AF_INET, SOCK_STREAM, 0);
- if ($socket < 0) echo "socket() failed: reason: " . strerror ($socket) . "<br>";
- // Connect
- $result = connect ($socket, $address, $service_port);
- if ($result < 0) echo "connect() failed.\nReason: ($result) " . strerror($result) . "<br>";
- // Send request
- write ($socket, $request, strlen ($request));
- // Grab result
- $outresult = "";
- while (read ($socket, $out, 2048) >= 0) {
- $outresult .= $out;
- }
- // Close socket
- close ($socket);
- return $outresult;
- }
- //
- // Send an HTTP POST request
- //
- function HTTPPOST($host, $postfile, $varname, $vardata)
- {
- $boundary = "----boundary----";
- // Build POST data
- $postheader = "$boundary\r\n";
- $postheader .= "Content-Disposition: form-data; name=\"$varname\"\r\n\r\n";
- $postheader .= "$vardata\r\n\r\n"; // FIX ! there's only one return in ie data, but data gets truncated here without two.
- $postheader .= "$boundary\r\n\r\n";
- $postlen = strlen($postheader);
- // Build POST header
- $header = "POST $postfile HTTP/1.0\r\n";
- $header .= "Host: $host\r\n";
- $header .= "Content-Type: multipart/form-data; boundary=$boundary\r\n";
- $header .= "Content-Length: $postlen\r\n\r\n";
- $header .= $postheader;
- return HTTPRequest($host, $header);
- }
|
|