之前一直没有细心关注过curl,用的时候也是直接调取封装好的方法,
做微信公共账号和其他api接口的时候也没有遇到400 Bad Request错误
今天就奇了个怪了,一直报 400 Bad Request
网上找了以下解决方法:
1. url地址有误.
手动在地址栏里输入url看看请求是否正常.
注意: 如果url地址里面包含换行符也有可能返回400.
2. https请求需要设置对应参数
## Below two option will enable the HTTPS option.
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
3. url中传递的字符串需要url_encode转码
但我试了都不起作用,依旧:
郁闷中 将method改为大写,刷新后一切ok!
?
/**
* curl请求
* @param array $data 要请求的array数组
* @param str $url 请求的地址
* @param str $method 大写 POST GET
* @return array
*/
static public function curl($data, $url, $method = 'POST') {
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
//$method 方法
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, strtoupper($method));
//启用时会将服务器服务器返回的"Location:"放在header中递归的返回给服务器
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
//自动设置header中的referer信息
curl_setopt($ch, CURLOPT_AUTOREFERER, 1);
//在HTTP中的"POST"操作数据
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
// 设置超时限制防止死循环
curl_setopt($ch, CURLOPT_TIMEOUT, 10);
//在curl_exec()获取的信息以文件流的形式返回,而不是直接输出
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$tmpInfo = curl_exec($ch);
if (curl_errno($ch)) {
return curl_error($ch);
}
curl_close($ch);
return $tmpInfo;
}