POST请求https接口-curl获取结果乱码解决-curl结果为空问题-PHP

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/zhuxiongyin/article/details/81112073

 curl获取结果乱码的解决方法:

HTML响应头没有设定,就自行设定,有些不用设定响应头内容,但还是有乱码

这样就要解释内容:

curl_setopt($curl, CURLOPT_ENCODING, 'gzip,deflate');

curl结果为空问题解决方法:

如果是https协议使用结果为空,如下这样可以解决:

curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);// 对认证证书来源的检查
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST,  false);// 从证书中检查SSL加密算法是否存在

有些要加上缓存:

curl_setopt($curl, CURLOPT_COOKIEFILE,$GLOBALS ['cookie_file']);// 读取上面所储存的Cookie信息
 	curl_setopt($curl, CURLOPT_COOKIEJAR, $GLOBALS['cookie_file']);// 存放Cookie信息的文件名称

代码如下(自行测试): 

<?PHP

$data['name']='name';
$data['sex']='男';
$url='https://api.xxxxx.com/push/pushAll';
$huawei_res=post_curls($url,$data);
$huawei_res=json_decode($huawei_res,true);

/**
 * [post_curls POST请求https接口返回内容]
 * @param  [string] $url  [请求的URL地址]
 * @param  [string] $post [请求的参数]
 * @return [string]       [JSON数据]
 */
function post_curls($url, $post){

	$curl = curl_init();// 启动一个CURL会话
	curl_setopt($curl, CURLOPT_URL, $url);// 要访问的地址
	curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, 0);// 对认证证书来源的检查
	curl_setopt($curl, CURLOPT_SSL_VERIFYHOST,  2);// 从证书中检查SSL加密算法是否存在
	curl_setopt($curl, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']); // 模拟用户使用的浏览器
	curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 1);// 使用自动跳转
	// curl_setopt($curl, CURLOPT_REFERER, $ref); // 手动设置referer
	curl_setopt($curl, CURLOPT_AUTOREFERER, 1); // 自动设置Referer
	curl_setopt($curl, CURLOPT_POST, 1); // 发送一个常规的Post请求
	curl_setopt($curl, CURLOPT_POSTFIELDS, $post); // Post提交的数据包
	curl_setopt($curl, CURLOPT_COOKIEFILE,$GLOBALS ['cookie_file']);// 读取上面所储存的Cookie信息
 	curl_setopt($curl, CURLOPT_COOKIEJAR, $GLOBALS['cookie_file']);// 存放Cookie信息的文件名称
 	// curl_setopt($curl, CURLOPT_HTTPHEADER,array('Accept-Encoding: gzip, deflate','accept-charset:utf-8','content-type:application/json'));//设置HTTP头字段
 	curl_setopt($curl, CURLOPT_ENCODING, 'gzip,deflate');// 解释gzip内容
	curl_setopt($curl, CURLOPT_TIMEOUT, 30); // 设置超时限制防止死循环
	curl_setopt($curl, CURLOPT_HEADER, 0);// 显示返回的Header区域内容
	curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); // 获取的信息以文件流的形式返回
	curl_setopt($curl,CURLOPT_CONNECTTIMEOUT,10);// 在发起连接前等待的时间,如果设置为0,则无限等待。

	$res = curl_exec($curl); // 执行操作
	if (curl_errno($curl)) {
	    echo 'Errno'.curl_error($curl);// 捕抓异常
	}
	curl_close($curl); // 关闭CURL会话
	return $res; // 返回数据,json格式

}

猜你喜欢

转载自blog.csdn.net/zhuxiongyin/article/details/81112073