php 模拟http发送请求三种方式(curl,stream流的方式,socket)

513次阅读
没有评论

一,curl

cURL 是一个用来传输数据的工具,支持多种协议,如在 Linux 下用 curl 命令行可以发送各种 HTTP 请求。PHP 的 cURL 是一个底层的库,它能根据不同协议跟各种服务器通讯,HTTP 协议是其中一种。

post请求

  • public static function http_post($url,$data_string,$timeout = 60)
  • {
  • //curl验证成功
  • $ch = curl_init($url);
  • curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
  • curl_setopt($ch, CURLOPT_POSTFIELDS,$data_string);
  • curl_setopt($ch, CURLOPT_RETURNTRANSFER,true);
  • curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); 跳过证书检查
  • curl_setopt($ch, CURLOPT_TIMEOUT, $timeout);
  • curl_setopt($ch, CURLOPT_HTTPHEADER, array(
  • 'Content-Type: application/json',
  • 'Content-Length: ' . strlen($data_string)
  • ));
  •  
  • $result = curl_exec($ch);
  • if (curl_errno($ch)) {
  • print curl_error($ch);
  • }
  • curl_close($ch);
  • return $result;
  • }

GET请求 public function doCurlGetRequest($url,$data,$timeout = 50){ if($url == “” || $timeout <= 0){ return false; } $url = $url.’?’.http_build_query($data); $con = curl_init((string)$url); curl_setopt($con, CURLOPT_HEADER, 0); curl_setopt($con, CURLOPT_RETURNTRANSFER,1); curl_setopt($con, CURLOPT_TIMEOUT, (int)$timeout); $output = curl_exec($con); //释放curl句柄 curl_close($con); return $output; }

1,curl请求http

$url = ‘//www.jb51.net’;
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_HEADER, 1);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
$data = curl_exec($curl);
curl_close($curl);
var_dump($data);

2,curl请求https

$url = ‘https://www.jb51.net’;
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_HEADER, 1);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);//这个是重点。
$data = curl_exec($curl);
curl_close($curl);
var_dump($data);

/**当请求https的数据时,会要求证书,这时候,加上下面这两个参数,规避ssl的证书检查

curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); // https请求 不验证证书和hosts

**/

二,stream流的方式

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

**详细介绍地址www.jb51.net/article/68891.htm

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;

}

三,socket方式

使用套接字建立连接,拼接 HTTP 报文发送数据进行 HTTP 请求。

一个 GET 方式的例子:

<?php

$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);

}

?>

正文完
可以使用微信扫码关注公众号(ID:xzluomor)
post-qrcode
 
评论(没有评论)