直接上代码,如下。
注意请求参数为json格式的话,需要
json_encode($params)
php
function doRequest($url, $method = 'GET', $params = [])
{
$ch = curl_init();
//设置抓取的url
curl_setopt($ch, CURLOPT_URL, $url);
//不设置头文件的信息作为数据流输出
curl_setopt($ch, CURLOPT_HEADER, 0);
//设置获取的信息以文件流的形式返回,而不是直接输出。
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
//设置curl允许执行的最长秒数
curl_setopt($ch, CURLOPT_TIMEOUT, 60);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
//判断是否为post请求
if ($method == 'POST') {
//设置post方式提交
curl_setopt($ch, CURLOPT_POST, 1);
//全部数据使用HTTP协议中的"POST"操作来发送。
//要发送文件,在文件名前面加上@前缀并使用完整路径。
//这个参数可以通过urlencoded后的字符串类似'para1=val1¶2=val2&...'或使用一个以字段名为键值,字段数据为值的数组。
//如果value是一个数组,Content-Type头将会被设置成multipart/form-data。
curl_setopt($ch, CURLOPT_POSTFIELDS, $params);
// curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($params));//参数是json的话就不需要这个
//设置post发送的参数为json格式--注意这里如果不需要json格式 可以去掉。
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
'Content-Type: application/json; charset=utf-8',//只适用于请求参数为json的时候
'Content-Length:' . strlen($params),//只适用于请求参数为json的时候
'Cache-Control: no-cache',
'Pragma: no-cache'
));
}
$response = curl_exec($ch);
//可用来检查curl错误
// $errorNo = curl_errno($curl);
// if ($errorNo) {
// return $errorNo;
// }
curl_close($ch);
return json_decode($response, true);
}
再来一个curl模拟formdata上传图片的请求示例
php
function()
{
$filePath = './image.png'; //本地图片路径
//构建multipart/form-data的数据
$data = array(
'debug' => 1,
'file' => new CURLFile($filePath, 'image/png', 'image.png')
);
//发送post请求
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);
if (curl_errno($ch)) {
// echo 'Error:' . curl_error($ch);
return false;
}
curl_close($ch);
return json_decode($response, true);
}