一,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 方式的例子:
$fp
=
fsockopen
(
"www.example.com"
, 80,
$errno
,
$errstr
, 30);
if
(!
$fp
) {
echo
"$errstr ($errno)
\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
);
}
?>