PHP4 HTTP Post без cURL - PullRequest
       20

PHP4 HTTP Post без cURL

2 голосов
/ 19 марта 2010

У меня есть следующий код, который работает на 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 не установлены.

Ответы [ 2 ]

0 голосов
/ 19 марта 2010

Что-то вроде следующего поможет, если кому-то понадобится помощь в этом.

        $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();
        }
0 голосов
/ 19 марта 2010

Вы не должны использовать PHP 4. Он больше не поддерживается и не получает никаких исправлений безопасности.

Если вы хотите посмотреть что-нибудь, написав что-то самостоятельно, вы должны начать с fsockopen () . Существует базовый пример, который может делать то, что вы хотите, и не должно быть слишком сложно преобразовать его в запрос POST. Я использовал анализатор пакетов (Wireshark), чтобы получить образцы HTTP, которые я мог (по сути) скопировать и вставить в свое приложение PHP, однако спецификации и множество примеров доступны в Интернете.

...