最近项目开发碰上个问题,需要用到curl去掉第三方提供的接口,于是遍封装了一个公用方法:
public function request_post($url, $post_data = array(), $ispost = true) {
if (empty($url) || empty($post_data)) {
return false;
}
// return $url;
$o = "";
foreach ( $post_data as $k => $v )
{
$o.= "$k=" . urlencode( $v ). "&" ;
}
if($ispost){
$url=$url;
// $post_data = http_build_query($post_data);
}else{
$post_data = substr($o,0,-1);
$url = $url.'?'.$post_data;
}
// header("Content-type: text/html; charset=utf-8");
$ch = curl_init();//初始化curl
// curl_setopt($ch, CURLOPT_HTTPHEADER, array(
// 'Content-Type: multipart/form-data',
// 'Content-Length: '.strlen($post_data)
// ));
curl_setopt($ch, CURLOPT_URL,$url);//抓取指定网页
// curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
// curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($ch, CURLOPT_HEADER, 0);//设置header
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);//要求结果为字符串且输出到屏幕上
if($ispost){
curl_setopt($ch, CURLOPT_POST, 1);//post提交方式
curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data);
}
$data = curl_exec($ch);//运行curl
curl_close($ch);
return $data;
}
调用第三方接口时,一切正常,但是有一个地方需要用到上传二进制的音频文件,于是将界面获取到的音频文件转成blob格式提交PHP接口,PHP处理代码如下:
$speech = file_get_contents('php://input', 'r');
$param = array(
speech => $speech
);
return Request_curl::request_post($url, $param);
本以为会放回成功的状态,但是现在是这样的:
{
"msg": "语音数据错误,应为二进制类型",
"code": 305
}
请大神帮忙看下问题,感激不尽!