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

答案

  • curl方式
  • stream流的方式
  • socket方式

答案解析

1.cURL

curl发送Post请求:

  1. $url = "http://localhost/post_output.php";
  2. $post_data = array (
  3. "foo" => "bar",
  4. "query" => "Nettuts",
  5. "action" => "Submit"
  6. );
  7. $ch = curl_init();
  8. curl_setopt($ch, CURLOPT_URL, $url);
  9. curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
  10. curl_setopt($ch, CURLOPT_POST, 1); // 我们在POST数据哦!
  11. curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data); // 加上POST变量
  12. $output = curl_exec($ch);
  13. curl_close($ch);
  14. echo $output;

2.stream流的方式

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

以一个 POST 请求为例:

  1. function post($url, $data)
  2. {
  3. $postdata = http_build_query(
  4. $data
  5. );
  6. $opts = array('http' =>
  7. array(
  8. 'method' => 'POST',
  9. 'header' => 'Content-type: application/x-www-form-urlencoded',
  10. 'content' => $postdata
  11. )
  12. );
  13. $context = stream_context_create($opts);
  14. $result = file_get_contents($url, false, $context);
  15. return $result;
  16. }

3.socket方式

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

一个 GET 方式的例子:

  1. $fp = fsockopen("www.example.com", 80, $errno, $errstr, 30);
  2. if (!$fp) {
  3. echo "$errstr ($errno)<br />\n";
  4. } else {
  5. $out = "GET / HTTP/1.1\r\n";
  6. $out .= "Host: www.example.com\r\n";
  7. $out .= "Connection: Close\r\n\r\n";
  8. fwrite($fp, $out);
  9. while (!feof($fp)) {
  10. echo fgets($fp, 128);
  11. }
  12. fclose($fp);
  13. }

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

参考资料