首先了解一下php的curl
<?php
// 初始化 cURL 会话
$curl = curl_init();
// 设置你需要抓取的URL
curl_setopt($curl, CURLOPT_URL, 'http://www.baidu.com');
// 设置header
curl_setopt($curl, CURLOPT_HEADER, 1);
// 设置cURL 参数,要求结果保存到字符串中还是输出到屏幕上。
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
// 运行cURL,请求网页
$data = curl_exec($curl);
// 关闭URL请求
curl_close($curl);
// 显示获得的数据
var_dump($data);
?>
封装成Http类:
<?php
class Http {
//$url 请求地址 $data:请求参数 $http_opts :curl_setopt()参数
public function put( $url, $data, $http_opts = null ) {
if (!isset($url) || empty($url)) {
return array( 'code' => 400, 'message' => '缺少请求链接' );
}
if (!isset($data) || empty($data)) {
return array( 'code' => 400 ,'message' => '缺少请求参数');
}
if (is_array($data)) {
$data = http_build_query($data);
}
$curl_handler = curl_init();
$options = array(
CURLOPT_URL => $url,
CURLOPT_RETURNTRANSFER => 1,
CURLOPT_CONNECTTIMEOUT => 15,
CURLOPT_HEADER => false,
CURLOPT_USERAGENT => isset($_SERVER['HTTP_USER_AGENT']) ? $_SERVER['HTTP_USER_AGENT'] : 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.114 Safari/537.36',
CURLOPT_POST => TRUE,
CURLOPT_POSTFIELDS => $data,
CURLOPT_CUSTOMREQUEST => 'PUT',
CURLOPT_HTTPHEADER => array('Content-Length: ' . strlen($data))
);
if (is_array($http_opts)) {
foreach ($http_opts as $key => $value){
$options[$key] = $value;
}
}
curl_setopt_array($curl_handler, $options);
$curl_result = curl_exec($curl_handler);
$curl_http_status = curl_getinfo($curl_handler,CURLINFO_HTTP_CODE);
$curl_http_info = curl_getinfo($curl_handler);
if ($curl_result == false) {
$error = curl_error($curl_handler);
curl_close($curl_handler);
return array('code' => $curl_http_status, 'message' => $error,'http_info' => $curl_http_info);
}
curl_close($curl_handler);
$encode = mb_detect_encoding($curl_result, array('ASCII', 'UTF-8','GB2312', 'GBK', 'BIG5'));
if ($encode != 'UTF-8') {
$curl_result = iconv($encode, 'UTF-8', $curl_result);
}
$result = json_decode($curl_result, true);
if (is_null($result)) {
$result = $curl_result;
}
return array('code' => 200, 'message' => 'ok', 'data' => $result,'http_info' => $curl_http_info);
}
public function post( $url, $data, $http_opts = null ) {
if (!isset($url) || empty($url)) {
return array( 'code' => 400, 'message' => '缺少请求链接' );
}
if (!isset($data)) {
return array( 'code' => 400 ,'message' => '缺少请求参数');
}
//解析链接,判断请求协议
//$parse_url_array = parse_url($url);
$curl_handler = curl_init(); //初始化一个curl对象
$options = array(
// PHP取回的URL地址。可以在用curl_init()函数初始化时设置这个选项
CURLOPT_URL => $url,
// 在启用CURLOPT_RETURNTRANSFER时候将获取数据返回
CURLOPT_RETURNTRANSFER => 1,
//最大延迟秒数
CURLOPT_CONNECTTIMEOUT => 15,
// 把一个头包含在输出中,设置这个选项为一个非零值。
CURLOPT_HEADER => false,
// 在HTTP请求中包含一个”user-agent”头的字符串
CURLOPT_USERAGENT => isset($_SERVER['HTTP_USER_AGENT']) ? $_SERVER['HTTP_USER_AGENT'] : 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.114 Safari/537.36',
// 如果你想PHP去做一个正规的HTTP POST,设置这个选项为一个非零值。这个POST是普通的 application/x-www-from-urlencoded 类型,多数被HTML表单使用。
CURLOPT_POST => TRUE,
// 传递一个作为HTTP “POST”操作的所有数据的字符串。
CURLOPT_POSTFIELDS => $data
);
/*if ($parse_url_array['scheme'] == 'https') {
$options[CURLOPT_SSL_VERIFYPEER] = 0;
$options[CURLOPT_SSL_VERIFYHOST] = 0;
$options[CURLOPT_SSLVERSION] = 3;
}*/
if (is_array($http_opts)) {
// 接口参数
foreach ($http_opts as $key => $value) {
$options[$key] = $value;
}
}
curl_setopt_array($curl_handler, $options);
// 运行cURL,请求网页获取URL站点内容
$curl_result = curl_exec($curl_handler);
//获取最后一次收到的HTTP状态码
$curl_http_status = curl_getinfo($curl_handler,CURLINFO_HTTP_CODE);
$curl_http_info = curl_getinfo($curl_handler);
if ($curl_result == false) {
$error = curl_error($curl_handler);
curl_close($curl_handler);
return array('code' => $curl_http_status, 'message' => $error,'http_info' => $curl_http_info);
}
curl_close($curl_handler); // 关闭一个curl会话
//自动获取字符串编码函数
$encode = mb_detect_encoding($curl_result, array('ASCII', 'UTF-8','GB2312', 'GBK', 'BIG5')); //进行编码识别
if ($encode != 'UTF-8') {
$curl_result = iconv($encode, 'UTF-8', $curl_result);
}
$result = json_decode($curl_result, true);
if (is_null($result)) {
$result = $curl_result;
}
return array('code' => $curl_http_status, 'message' => 'ok', 'data' => $result,'http_info' => $curl_http_info);
}
public function get( $url, $http_opts = null, $is_transcoding = true ) {
if (!isset($url) || empty($url)) {
return array( 'code' => 400, 'message' => '缺少请求链接' );
}
$curl_handler = curl_init();
// curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);//这个是重点。
$options = array(
CURLOPT_URL => $url, // 请求地址
CURLOPT_RETURNTRANSFER => 1,
CURLOPT_CONNECTTIMEOUT => 15,
CURLOPT_HEADER => false,
// CURLOPT_SSL_VERIFYPEER => false,
// CURLOPT_SSL_VERIFYPEER => false,
// CURLOPT_SSL_VERIFYHOST => false,
CURLOPT_USERAGENT => isset($_SERVER['HTTP_USER_AGENT']) ? $_SERVER['HTTP_USER_AGENT'] : 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.114 Safari/537.36',
);
/*if ($parse_url_array['scheme'] == 'https') {
$options[CURLOPT_SSL_VERIFYPEER] = 0;
$options[CURLOPT_SSL_VERIFYHOST] = 0;
$options[CURLOPT_SSLVERSION] = 3;
}*/
if (is_array($http_opts)) {
foreach ($http_opts as $key => $value){
$options[$key] = $value;
}
}
curl_setopt_array($curl_handler, $options);
$curl_result = curl_exec($curl_handler);
$curl_http_status = curl_getinfo($curl_handler,CURLINFO_HTTP_CODE);
$curl_http_info = curl_getinfo($curl_handler);
if ($curl_result === false) {
$error = curl_error($curl_handler);
curl_close($curl_handler);
return array('code' => $curl_http_status, 'message' => $error,'http_info' => $curl_http_info);
}
if ($is_transcoding) {
$encode = mb_detect_encoding($curl_result, array('ASCII', 'UTF-8','GB2312', 'GBK', 'BIG5'));
if ($encode != 'UTF-8') {
$curl_result = iconv($encode, 'UTF-8', $curl_result);
}
}
$result = json_decode($curl_result,true);
if (is_null($result) || empty($result)) {
$result = $curl_result;
}
curl_close($curl_handler);
return array('code' => $curl_http_status, 'data' => $result,'http_info' => $curl_http_info);
}
public function delete($url, $opt = null) {
if (!isset($url) || empty($url)) {
return array('code' => 400, 'message' => '缺少请求链接');
}
$curl_handle = curl_init();
curl_setopt($curl_handle, CURLOPT_URL, $url);
curl_setopt($curl_handle, CURLOPT_FILETIME, true);
curl_setopt($curl_handle, CURLOPT_FRESH_CONNECT, false);
curl_setopt($curl_handle, CURLOPT_HEADER, true);
curl_setopt($curl_handle, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl_handle, CURLOPT_NOSIGNAL, true);
curl_setopt($curl_handle, CURLOPT_CUSTOMREQUEST, 'DELETE');
$options = [];
if (is_array($opt)) {
foreach ($opt as $key => $value) {
$options[$key] = $value;
}
}
curl_setopt_array($curl_handle, $options);
$curl_result = curl_exec ( $curl_handle );
$curl_http_status = curl_getinfo($curl_handle, CURLINFO_HTTP_CODE);
$curl_http_info = curl_getinfo($curl_handle);
if ($curl_result === false) {
$error = curl_error($curl_handle);
curl_close($curl_handle);
return array('code' => $curl_http_status, 'message' => $error,'http_info' => $curl_http_info);
}
$encode = mb_detect_encoding($curl_result, array('ASCII', 'UTF-8', 'GB2312', 'GBK', 'BIG5'));
if ($encode != 'UTF-8') {
$curl_result = iconv($encode, 'UTF-8', $curl_result);
}
$result = json_decode($curl_result, true);
if (is_null($result) || empty($result)) {
$result = $curl_result;
}
curl_close($curl_handle);
return array('code' => $curl_http_status, 'data' => $result,'http_info' => $curl_http_info);
}
}
发送请求类