思考半天,想用标题把使用到的东西都表达出来。最后还是语文不过关,没能写完整…
前段时间,出于业务需要,对方服务器希望能取我系统中的数据。我们提供了ftp上传的方式,对方觉得麻烦。要求以这种方式传数据。但是这种直接传数据的方式,如果数据量太大,会因为网速等原因,产生许多不必要的麻烦。
这里明确一下,主要是使用Curl的扩展,通过post提交json数据到另外的服务器。
本来项目中还需要一个linux定时任务,来定时提交数据。因为代码没写完。所以先不对这一部分说明。
前期准备
1、需开启php的curl扩展(也可以使用file类文件,本文使用curl)
2、关闭yii2中的csrf验证。本文为了方便直接关闭当前控制器的验证。项目中避免使用此方法。防止跨域脚本攻击。
public function init(){
$this->enableCsrfValidation = false;
}
3、实际使用的时候会出现无法请求服务器状况。关闭防火墙即可。
本地测试代码
public function actionHttprest(){
function http_post_json($url, $jsonStr){
$ch = curl_init();
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_POSTFIELDS, $jsonStr);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
'Content-Type: application/json; charset=utf-8',
'Content-Length: ' . strlen($jsonStr)
)
);
$response = curl_exec($ch);
$errorno = curl_errno($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
return arra