PHP中发起http请求有哪几种方式?

159 2月之前 PHP curl socket stream

答案

  1. curl方式
  2. stream流的方式
  3. socket方式

答案解析

1.cURL

curl发送Post请求:

$url = "http://localhost/post_output.php";

$post_data = array (
    "foo" => "bar",
    "query" => "Nettuts",
    "action" => "Submit"
);

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_POST, 1);                 // 我们在POST数据哦!
curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data);  // 加上POST变量
$output = curl_exec($ch);
curl_close($ch);

echo $output;
2.stream流的方式

stream_context_create 作用:创建并返回一个文本数据流并应用各种选项,可用于fopen(), file_get_contents() 等过程的超时设置、代理服务器、请求方式、头信息设置的特殊过程。

以一个 POST 请求为例:

function post($url, $data)
{
    $postdata = http_build_query(
        $data
    );

    $opts = array('http' =>
                      array(
                          'method' => 'POST',
                          'header' => 'Content-type: application/x-www-form-urlencoded',
                          'content' => $postdata
                      )
    );
    $context = stream_context_create($opts);
    $result = file_get_contents($url, false, $context);
    return $result;
}
3.socket方式

使用套接字建立连接,拼接 HTTP 协议字符串发送数据进行 HTTP 请求。

一个 GET 方式的例子:

$fp = fsockopen("www.example.com", 80, $errno, $errstr, 30);
if (!$fp) {
    echo "$errstr ($errno)<br />\n";
} else {
    $out = "GET / HTTP/1.1\r\n";
    $out .= "Host: www.example.com\r\n";
    $out .= "Connection: Close\r\n\r\n";
    fwrite($fp, $out);
    while (!feof($fp)) {
        echo fgets($fp, 128);
    }
    fclose($fp);
}

本文介绍了发送 HTTP 请求的几种不同的方式。

参考资料