PHP-curl模拟POST请求、微信公众号上传素材文件
2021-03-22 21:24
阅读:2511
/** * 模拟post请求 * @param string $url 请求地址 * @param string|array $data 请求数据 * @param bool $decode 是否decode返回数据 * @param array $header * @param bool $ssl 是否开启ssl * @return bool|mixed */ public static function _requestPost($url, $data, $decode = true, $header = [], $ssl = true) { $hadFile = false; //curl完成 $curl = curl_init(); //设置curl选项,可用于上传公众号素材 if (is_array($data) && isset($data['media'])){ $value = $data['media']; if (class_exists('\CURLFile')) { curl_setopt($curl, CURLOPT_SAFE_UPLOAD, true); $data['media'] = new CURLFile(realpath(ltrim($value, '@'))); $hadFile = true; } elseif (defined('CURLOPT_SAFE_UPLOAD')) { curl_setopt($curl, CURLOPT_SAFE_UPLOAD, false); $hadFile = true; } } if (!$hadFile && is_array($data)) $data = json_encode($data,JSON_UNESCAPED_UNICODE); curl_setopt($curl, CURLOPT_HTTPHEADER, $header); curl_setopt($curl, CURLOPT_URL, $url);//URL $user_agent = isset($_SERVER['HTTP_USER_AGENT']) ? $_SERVER['HTTP_USER_AGENT'] : 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:38.0) Gecko/20100101 Firefox/38.0 FirePHP/0.7.4'; curl_setopt($curl, CURLOPT_USERAGENT, $user_agent);//user_agent,请求代理信息 curl_setopt($curl, CURLOPT_AUTOREFERER, true);//referer头,请求来源 curl_setopt($curl, CURLOPT_TIMEOUT, 30);//设置超时时间 //SSL相关 if ($ssl) { curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);//禁用后cURL将终止从服务端进行验证 curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 2);//检查服务器SSL证书中是否存在一个公用名(common name)。 } // 处理post相关选项 curl_setopt($curl, CURLOPT_POST, true);// 是否为POST请求 curl_setopt($curl, CURLOPT_POSTFIELDS, $data);// 处理请求数据 // 处理响应结果 curl_setopt($curl, CURLOPT_HEADER, false);//是否处理响应头 curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);//curl_exec()是否返回响应结果 // 发出请求 $response = curl_exec($curl); if (false === $response) { echo '<br>', curl_error($curl), '<br>'; return false; } curl_close($curl); $forms = stripslashes(html_entity_decode($response)); if ($decode) $forms = json_decode($forms, TRUE); return $forms; }
参数解读:
参数名 | 类型 | 描述 | 必填 | 可选值 |
$url | string | 请求地址 | 是 | 网络请求地址 |
$data | string|array | 请求数据 | 是 | 请求数据 |
$decode | bool | 是否返回格式化后的数据 | 否 | false |
$header | array | 自定义header内容 | 否 | 数组 |
$ssl | bool | 是否开启ssl | 否 | false |
使用示例:
public function test() { $ext_url = 'api地址'; $param = array( 'expire_seconds' => 3600, ); $result = ClassName::_requestPost($ext_url, $param); }
文中的ClassName请替换为自己的文件类名
示例只有一个,其他的请自行实验
{{commentTotal}} 条评论
{{item.nickname}}
{{item.create_date}}
{{item.content}}
- 上拉或点击加载更多 -
- 加载中 -
- 没有更多了 -