问题
I have the following code that works on PHP5 to send a HTTP POST without using cURL. I would like this to work on PHP 4.3.0 and above:
$opts = array('http' =>
array(
'method' => 'POST',
'header' => "Content-type: application/x-www-form-urlencoded\r\n" . "Content-Type: application/json\r\n",
'content' => $query
)
);
$context = stream_context_create($opts);
$result = file_get_contents($url, false, $context);
HTTP context is only supported on PHP5. Is there anyway to make this work with PHP 4.3.0 - I need a fallback method if PHP5 or cURL is not installed.
回答1:
You shouldn't be using PHP 4. It is discontinued and so doesn't receive any security patches.
If you want to take a look writing something yourself, you want to start with fsockopen(). There is a basic example that may do what you want and it shouldn't be too hard to convert it to a POST request. I used a packet sniffer (Wireshark) to get HTTP samples that I could (in essence) copy and paste into my PHP application however the specifications and a lot of samples are available online.
回答2:
Something like the following will do the trick if anyone needs help with this.
$headers = "POST $url 1.1\r\n";
$headers .= "Content-type: application/x-www-form-urlencoded\r\n";
$headers .= "Content-Type: application/json\r\n";
$headers .= "Accept: application/json\r\n";
if (!empty($body)) {
$headers .= "Content-length: " . strlen($body) . "\r\n";
}
$headers .= "\r\n";
$body = $query;
if ($fp = fsockopen($host, 80, $errno, $errstr, 180)) {
fwrite($fp, $headers . $body, strlen($headers . $body));
fclose();
}
来源:https://stackoverflow.com/questions/2478077/php4-http-post-without-curl