I even went to http://www.ietf.org/ to find out
the specific protocol for HTTP POSTs, but I didn't
find it there. RFC 2616 (HTTP) does not give the
exact format for POST requests.
Question: Where is the format for POST requests defined?
---------------- send_post.php ---------------
<?php
// file: send_post.php
error_reporting(E_ALL & ~E_NOTICE);
$eol = "\r\n";
$errno = 0;
$errstr = '';
$data = 'username=george&password=i81bpz';
$fid = fsockopen('localhost', 8080, &$errno, &$errstr, 30);
if ($fid) {
fputs ($fid, "POST /post/show_post.php HTTP/1.1$eol");
fputs ($fid, "HOST: localhost$eol");
fputs ($fid, "Connection: close$eol");
fputs ($fid, "Content-Type: application/x-www-form-urlencoded$eol");
// Use 'Content-Length' NOT 'Length' !
fputs ($fid, 'Content-Length: ' . strlen($data) . $eol);
fputs ($fid, $eol);
fputs ($fid, $data);
fputs ($fid, $eol);
fpassthru($fid);
}
?>
------------- show_post.php -----------------
<?php
// file: show_post.php
error_reporting(E_ALL & ~E_NOTICE);
echo "<pre>\n";
echo "------------ POST VARIABLES ----------\n";
print_r($HTTP_POST_VARS);
echo "------------ SERVER VARIABLES ----------\n";
print_r($HTTP_SERVER_VARS);
echo "</pre>\n";
?>
Use curl instead.
---
Rasmus Christian Kaae
www.3kings.dk | www.hestebasen.com
>> For the benefit of others, I want to show how to do
>> an HTTP POST request using fsockopen(). I banged my
>> head against a wall for two days trying to figure
>> this out. I even went to http://php.net/ to find
>> out how to do this, but it didn't help because
>> my mind automagically converted the "Content-Length"
>> header into "Length."
>
>
> Use curl instead.
>
What an amazingly helpful answer.
Try something like this? :
function PostToHost($host, $path, $data_to_send) {
$fp = fsockopen($host,80);
fputs($fp, "POST $path HTTP/1.1\n" );
fputs($fp, "Host: $host\n" );
fputs($fp, "Content-type: application/x-www-form-urlencoded\n" );
fputs($fp, "Content-length: ".strlen($data_to_send)."\n" );
fputs($fp, "Connection: close\n\n" );
fputs($fp, $data_to_send);
fclose($fp);
}
--
There is no signature.....
Try:
www.w3c.org
The RFC in question is RFC2616, which is the HTTP/1.1 specification and
can be found here:
ftp://ftp.isi.edu/in-notes/rfc2616.txt
--
MeerKat
Apologies, I really should have read your message more carefully. POSTs
-are- defined in this RFC very carefully but not really in a manner
whereby you can just read a paragraph or two and get the information you
want...
--
MeerKat
> fputs($fp, "POST $path HTTP/1.1\n" );
> fputs($fp, "Host: $host\n" );
I thought that the end of line sequence was
\r\n not just \n.