一个方法解决所有的 curl 请求的问题。
<?php
function curlTypeData( $method, $url, $data=false, $json=false )
{
$dataString = $json ? json_encode( $data ) : http_build_query( $data );
$ch = curl_init(); // 启动一个 CURL 请求
curl_setopt( $ch, CURLOPT_URL, $url ); // 确定要请求的地址
curl_setopt( $ch, CURLOPT_HEADER, 0); // 是否显示返回的 Header 区域内容
curl_setopt( $ch, CURLINFO_HEADER_OUT, true ); // 获取请求头信息
curl_setopt( $ch, CURLOPT_RETURNTRANSFER, true); // 获取的信息以文件流的形式返回
curl_setopt( $ch, CURLOPT_TIMEOUT, 5 ); // 请求过期时间
// curl_setopt( $ch, CURLOPT_SSL_VERIFYHOST, false); // 从证书中检查SSL加密算法是否存在
// curl_setopt( $ch, CURLOPT_SSL_VERIFYPEER, false); // 对认证证书来源的检查
// 判断要执行的 CURL 的请求方式
$method = strtoupper( $method );
switch ( $method ) {
case 'GET':
curl_setopt( $ch, CURLOPT_HTTPGET, true ); // 设置请求方式为 GET
break;
case 'POST':
curl_setopt( $ch, CURLOPT_POST, true ); // 设置请求方式为 POST
curl_setopt( $ch, CURLOPT_POSTFIELDS, $dataString );// 设置请求体,提交数据包
break;
case 'PUT':
curl_setopt( $ch, CURLOPT_PUT, true ); // 设置请求方式为 PUT
// curl_setopt( $ch, CURLOPT_CUSTOMREQUEST, 'PUT' );// 设置请求方式为 PUT
curl_setopt( $ch, CURLOPT_POSTFIELDS, $dataString );//设置请求体,提交数据包
break;
case 'DELETE':
curl_setopt( $ch, CURLOPT_CUSTOMREQUEST, 'DELETE' );// 设置请求方式为 DELETE
break;
default:
echo "不存在请求方式";
die();
}
// 判断是否要求 json
if ( $json ) {
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
'Content-Type: application/json; charset=utf-8',
'Content-Length: ' . strlen($dataString))
);
}
// 执行操作
$output = curl_exec( $ch ); // 执行操作
// $code = curl_getinfo( $ch, CURLINFO_HTTP_CODE ); // 获取返回的状态码
curl_close($ch); // 关闭CURL会话
echo $output;
}
?>