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

一,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);

}

?>

 

 

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值