2

我有以下代码可在 PHP5 上使用,以在不使用 cURL 的情况下发送 HTTP POST。我希望这适用于 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);

仅 PHP5 支持 HTTP 上下文。有没有办法让它与 PHP 4.3.0 一起工作 - 如果没有安装 PHP5 或 cURL,我需要一个后备方法。

4

2 回答 2

0

您不应该使用 PHP 4。它已停产,因此不会收到任何安全补丁。

如果你想看看自己写的东西,你想从fsockopen()开始。有一个基本示例可以做你想做的事情,将它转换为 POST 请求应该不会太难。我使用数据包嗅探器 (Wireshark) 来获取我可以(本质上)复制并粘贴到我的 PHP 应用程序中的 HTTP 示例,但是规范和大量示例可以在线获得。

于 2010-03-19T15:09:38.337 回答
0

如果有人需要帮助,像下面这样的东西可以解决问题。

        $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();
        }
于 2010-03-19T15:27:30.793 回答