У меня есть следующий код, который работает на PHP5 для отправки HTTP POST без использования cURL. Я хотел бы, чтобы это работало на PHP 4.3.0 и выше:
$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 поддерживается только на PHP5. В любом случае, чтобы выполнить эту работу с PHP 4.3.0, мне нужен резервный метод, если PHP5 или cURL не установлены.
Вы не должны использовать PHP 4. Это прекращено и поэтому не получает никаких исправлений безопасности.
Если вы хотите взглянуть на что-то само собой, вы хотите начать с fsockopen () . Существует базовый пример, который может делать то, что вы хотите, и не должно быть слишком сложно преобразовать его в запрос POST. Я использовал пакетный сниффер (Wireshark), чтобы получить образцы HTTP, которые я мог (по сути) копировать и вставлять в мое приложение PHP, однако спецификации и множество образцов доступны в Интернете.
Что-то вроде следующего будет делать трюк, если кто-то нуждается в помощи в этом.
$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(); }