使用RESTful API以post+json的方式给服务器传数据

    xiaoxiao2021-12-14  23

    思考半天,想用标题把使用到的东西都表达出来。最后还是语文不过关,没能写完整… 前段时间,出于业务需要,对方服务器希望能取我系统中的数据。我们提供了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 array($httpCode, $response); } $url = "http://127.0.0.2/basic/web/index.php?r=test/gcurl"; $jsonStr = json_encode(array('a' => 1, 'b' => 2)); list($returnCode, $returnContent) = http_post_json($url, $jsonStr); }

    以上代码中的curl提交方法是从网上找的。 这里对此方法做一个简单说明。 第一个设置curl_setopt($ch, CURLOPT_POST, 1);是以post的方式提交。

    第二个设置curl_setopt( ch,CURLOPTURL, url);是请求的地址。

    第三个设置curl_setopt( ch,CURLOPTPOSTFIELDS, jsonStr);是请求所携带的内容。这里使用json。

    第四个设置curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);是返回转换的页面。设置为false时,会显示服务器页面。

    第五个设置 curl_setopt($ch, CURLOPT_HTTPHEADER, array());是http的请求头。数组内容太多就拷下来了。这个设置是告诉对方服务器,传过去的数据为json

    函数中返回行 return array( httpCode, response);中,第一个变量为,curl请求后,返回的状态码。第二个变量为,对方服务器返回的内容。一般用于,告诉本地。对面是否拿到数据。

    由此可见,php中跨域传数据其实非常简单。

    传过去的数据,对方服务器要怎么获取。其实也非常简单。只需要一行代码。 服务器测试代码

    public function actionGcurl(){ $data = file_get_contents("php://input"); }

    到这里基本上传数据的过程就结束。

    转载请注明原文地址: https://ju.6miu.com/read-972214.html

    最新回复(0)