最近写了一个推送接口的工作需求,来记录一下
需要传输自定义header头,输出格式和秘钥
$header= array('Content-Type:application/json','Access-Id:'.$this->ak,'Authorization:'.$sign);//准备自定义header头信息
$code = $this->http_post($url,json_encode($data),$header);//调用http方法,传入请求地址、json化的数据、以及请求头
下面是http_post请求方法
public function http_post( $url, $post_data=array(), $header= '', $post = true, $timeout=30) { $ch = curl_init(); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); // 跳过证书检查 curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false); // 从证书中检查SSL加密算法是否存在 curl_setopt($ch, CURLOPT_URL,$url); curl_setopt($ch, CURLOPT_HTTPHEADER, $header); // curl_setopt($ch, CURLOPT_HTTPHEADER,header('Content-Type: application/json')); curl_setopt($ch, CURLOPT_POST,$post); curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_TIMEOUT, $timeout); $response = curl_exec($ch); curl_close($ch); return $response; }
下面是另一个httpget请求方法
public function httpGet($url,$header) { $curl = curl_init(); //初始化一个cURL会话。 curl_setopt($curl, CURLOPT_TIMEOUT, 100); //设置cURL允许执行的最长秒数 curl_setopt($curl, CURLOPT_URL, $url); //URL地址 curl_setopt($curl, CURLOPT_HTTPHEADER, $header); curl_setopt($curl, CURLOPT_SSL_VERIFYPEER,FALSE); //禁用后cURL将终止从服务端进行验证 curl_setopt($curl, CURLOPT_SSL_VERIFYHOST,FALSE); //不验证证书是否存在 // curl_setopt($curl, CURLOPT_HEADER, FALSE); //禁止后使用CURL_TIMECOND_IFUNMODSINCE,默认值为CURL_TIMECOND_IFUNMODSINCE curl_setopt($curl, CURLOPT_RETURNTRANSFER, TRUE); //将curl_exec()获取的信息以文件流的形式返回,而不是直接输出 $res = curl_exec($curl); //执行一个cURL会话 curl_close($curl); //关闭一个cURL会话 return $res; }
以上便是一个大体流程。
tip1:
二维数组转化为一维数组
$bee = []; foreach ($bookArr as $k => $v) { array_push($bee,...$this->getOneZjList($v)); }
神奇之处就是那三个.
tip2:
数组分页
$count = count($data['chapters']);//先计算总条数 $num = ceil($count/200);//向上取整,要循环的页数 echo "本次推送一共".$count."章节,共".$num."页。"." "; for($i=1; $i<=$num; $i++){ $page = $i; $pagesize = 200; $start=($page-1)*$pagesize;//偏移量,当前页-1乘以每页显示条数 echo "从第".$start."条开始"." "; $data['chapters'] = array_slice($bee,$start,$pagesize); //重点在这里,这里是控制每次推的内容 $url = $this->host.'/xxx/push'; $sign = md5($this->ak.$this->sk);//加密方式 $header= array('Content-Type:application/json','Access-Id:'.$this->ak,'Authorization:'.$sign); $code = $this->http_post($url,json_encode($data),$header); $codes = json_decode($code,true); var_dump($code);//输出请求结果 echo "已推".$page."页"." "; }