在项目中遇到这样的问题,对方要求上报方式是接口的请求方式采用 HTTP POST form 键值对形式,编码采用 UTF-8 编码格
式。Content-Type: application/x-www-form-urlencoded,相应参数字符串需根据实际情况进行转义。
拼接好参数数据,根据接口要求进行md5验证获取到sign值
第一种方式:提交类型 application/x-www-form-urlencoded
进行post提交,提交之前需使用函数http_build_query对拼接的数组进行转义,例如:
$paramArr = http_build_query($paramArrs);
在进行post模拟提交函数
$resData = $curlModel->postData($paramArr);
在postData类里面,有CPost函数,函数内容需是:
public static function CPost($url, $data = null, $header = array()){
$curl = curl_init();
$iHeads = array(
'Content-Type' => 'Content-type: application/x-www-form-urlencoded',
'Connection' => 'Connection: close',
'charset' => 'utf-8'
);
$iHeads = array_merge($iHeads, $header);
$timeout = 5;
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_POST, 1);
curl_setopt($curl, CURLOPT_CONNECTTIMEOUT, $timeout);
curl_setopt($curl, CURLOPT_HTTPHEADER, $iHeads);//设置输入的
curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.1) Gecko/20061204 Firefox/2.0.0.1");
curl_setopt ($curl, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt ($curl, CURLOPT_SSL_VERIFYPEER, 0);
$outPut = curl_exec($curl);
curl_close($curl);
return $outPut;
}
curl_setopt里面的设置参数与json POST提交有所不同,所以这些需要注意。
第二种方式:提交类型 Content-type: application/json
$resDatas = $curlModel->postData(json_encode($this->res));
public static function CPost($url, $data = null, $header = array())
{
$curl = curl_init();
$iHeads = array(
'Content-Type' => 'Content-type: application/json',
'Connection' => 'Connection: close'
);
$iHeads = array_merge($iHeads, $header);
$timeout = 20;
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_HEADER, false);
curl_setopt($curl, CURLOPT_TIMEOUT, $timeout);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.1) Gecko/20061204 Firefox/2.0.0.1");
curl_setopt($curl, CURLOPT_HTTPHEADER, $iHeads);
curl_setopt($curl, CURLOPT_POST, 1);
curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
$outPut = curl_exec($curl);
curl_close($curl);
return $outPut;
}
这是在做项目的时候遇到了一些问题,并在此坐下记录。