php

关于 php json接口开发的注意问题

dafenqi
2023-08-10 / 0 评论 / 11 阅读 / 正在检测是否收录...

关于 php json接口开发的注意问题

一是注意跨域问题.需要加 Access-Control-Allow-Origin:* http头.(针对于前端浏览器脚本调用接口)

二是如果请求的header里 Content-Type: 是 application/json,则需要用 file_get_contents("php://input");接收.如果用 swoole 框架的话,需要用$request->rawContent()接收.

如果请求header里Contente-Type是 multipart/form-data,或application/x-www-form-urlencoded或application/octet-stream
则需要用 $_POST($_GET)或$_FILES来接收.

Ps :js 代码调用接口示例如下

1.要加contentType: "application/json; charset=utf-8",

2.需要使用JSON.stringify 转换json对象或把对象转为字符形式,如'{"aa":22}'(json两边加单引号)

var submit_sync = function() {

$.<a class="wpal-linked-keyword" href="https://ajax.p2hp.com/" target="_blank">ajax</a>({  
    type: "post",  
    url: 'add-post-json.php',  
    async: false, // 使用同步方式  
    // 1 需要使用JSON.stringify 否则格式为 a=2&b=3&now=14...  
    // 2 需要强制类型转换,否则格式为 {"a":"2","b":"3"}  
    data: JSON.stringify({                    
        a: parseInt($('input[name="a"]').val()),  
        b: parseInt($('input[name="b"]').val()),  
        now: new Date().getTime() // 注意不要在此行增加逗号  
    }),  
    contentType: "application/json; charset=utf-8",  
    dataType: "json",  
    success: function(data) {  
        $('#result').text(data.result);  
    } // 注意不要在此行增加逗号  
});  

}

PHP请求接口的代码如下:

<?php
function curl_post($url, $data, $json=true)
{

  $ch = curl_init();
  curl_setopt($ch, CURLOPT_POST, 1);
  curl_setopt($ch, CURLOPT_URL, $url);
  if ($json && is_array($data)) {
      $data = json_encode($data, JSON_UNESCAPED_UNICODE|JSON_UNESCAPED_SLASHES);
  }
  curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
  curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
  curl_setopt($ch, CURLOPT_NOSIGNAL, 1);    //注意,毫秒超时一定要设置这个
  curl_setopt($ch, CURLOPT_TIMEOUT_MS, 2500);  //超时毫秒,cURL 7.16.2中被加入。从PHP 5.2.3起可使用

if ($json) {

curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/json; charset=utf-8','Content-Length:'.strlen($data)));

}

  $relt = curl_exec($ch);
  var_dump($relt);
  curl_close($ch);
  return $relt;

}
$data=array('key'=>'value');
curl_post('http://192.168.6.76:9523/?op=test', $data, true);
开发中一般不要用前端代码去调用非本系统的接口地址.

参考 https://blog.csdn.net/wangjun5159/article/details/47781443

https://blog.csdn.net/wangjun5159/article/details/49644507

0

Deprecated: strtolower(): Passing null to parameter #1 ($string) of type string is deprecated in /www/wwwroot/testblog.58heshihu.com/var/Widget/Archive.php on line 1032

评论 (0)

取消