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