thinkphp ,php post发送json请求,就收post请求

这篇博客探讨了如何在ThinkPHP框架中利用PHP发送POST请求,特别是发送JSON格式的数据。作者通过示例代码详细解释了实现这一功能的步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

发送方的代码如下

<?php
namespace Api\Controller;
use Think\Controller;
class IndexController extends Controller
{

    public function send()
    {
        ini_set("error_reporting","E_ALL & ~E_NOTICE");
        
        $obj->phonenum = '1111111';
        $data =  json_encode($obj);
        
        $url = "http://www.****.cn/Api/Sync/phonenum";
        
        $res = $this->http_request($url, $data);
        
        echo $res;
    }
    
    // HTTP请求(支持HTTP/HTTPS,支持GET/POST)
    function http_request($url, $data = null)
    {
        $curl = curl_init();
        curl_setopt($curl, CURLOPT_URL, $url);
        curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE);
        curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, FALSE);
        if (! empty($data)) {
            curl_setopt($curl, CURLOPT_POST, 1);
            curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
        }
        curl_setopt($curl, CURLOPT_RETURNTRANSFER, TRUE);
        $output = curl_exec($curl);
        curl_close($curl);
        return $output;
    }
}

接受方的代码如下

<?php
namespace Api\Controller;
use Think\Controller;

class SyncController extends Controller
{
    
    //判断用户手机号码是否存在
    public function phonenum()
    {
        
        $postStr = isset($GLOBALS["HTTP_RAW_POST_DATA"]) ? $GLOBALS["HTTP_RAW_POST_DATA"] : "";
        /* $this->logger('http://' . $_SERVER['HTTP_HOST'] . $_SERVER['PHP_SELF'] . (empty($_SERVER['QUERY_STRING']) ? "" : ("?" . $_SERVER['QUERY_STRING'])));
        $this->logger($postStr); */
        
        $sync_log = M('sync_log');
        $sync_log->url = 'http://' . $_SERVER['HTTP_HOST'] . $_SERVER['PHP_SELF'] . (empty($_SERVER['QUERY_STRING']) ? "" : ("?" . $_SERVER['QUERY_STRING']));
        $sync_log->poststr = $postStr;
        $sync_log->createtime =time();
        $sync_log->add();
        
        $res = json_decode($postStr, true);
        
        // 验证手机号码是否存在
        $user_db = M("member_list");
        $map['member_list_tel'] = $res['phonenum'];
        $map['display'] = 'on';
        $user_res = $user_db->where($map)->find();
        
        
        if ($user_res) {
            $arr = array(
                'clientid' => $user_res['member_list_id']
            );
        }else {
            $arr = array(
                'clientid' => 0
            );
            
        }
        
        echo json_encode($arr);
        
    }
}

<think>好的,我现在需要帮助用户了解如何在ThinkPHP框架中接收POST请求参数。首先,我需要回忆一下ThinkPHP的不同版本,因为不同版本的方法可能有所不同。用户提到了引用中的内容,比如I方法在引用1中提到,而引用2和3则讨论了路由和Ajax的使用。 首先,用户的问题集中在接收POST参数,所以我要先确定在ThinkPHP中常用的方法。根据引用1,I方法是一个快捷方法,可以用于获取各种类型的参数,包括POST。例如,I('post.变量名')。另外,在ThinkPHP5及之后的版本中,可能更推荐使用Request对象的方法,比如$this->request->post()。 接下来,我需要考虑如何给出示例代码。用户可能需要看到具体的控制器方法中的代码。例如,在控制器中,如何获取POST数据。同时,是否需要处理JSON数据?引用3提到使用Ajax接收JSON数据,这可能涉及到使用input('post.')或者php://input来获取原始数据。 还要注意不同版本的差异。比如,引用2提到ThinkPHP5.1的路由设置,支持post请求,这可能涉及到路由定义,但用户的问题主要是接收参数,所以重点还是在获取数据的方法上。 然后,我需要确保提供的示例代码正确,并且符合用户可能的版本。比如,I方法在ThinkPHP3中是常用的,而在ThinkPHP5中可能更推荐使用Request类。因此,可能需要分别给出不同版本的示例。 另外,用户可能需要知道如何验证数据是否存在,比如使用hasPost方法,或者设置默认值。引用1提到I方法的参数可以包括默认值和过滤方法,这也是需要注意的地方。 最后,是否需要处理文件上或其他类型的POST数据?可能不需要,因为用户的问题比较基础,但可以简要提及。 总结一下,回答的结构应该是: 1. 使用I方法(适用于TP3) 2. 使用Request对象(适用于TP5+) 3. 获取所有POST参数 4. 处理JSON数据 5. 示例代码 6. 注意事项,如版本差异和安全过滤 同时,要确保示例代码正确,比如在TP5中,需要注入Request对象,或者在控制器中继承Controller后使用request属性。 现在需要检查引用中的内容是否支持这些方法。引用1确实提到I方法支持post变量类型,引用2中的post请求路由可能相关,但参数获取还是通过I或Request。引用3中的Ajax处理可能涉及到JSON数据,所以需要包括这部分。 确保每个方法都有示例代码,并注明适用的版本。同时,提醒用户注意数据过滤,防止安全漏洞,如使用过滤方法参数。 可能还需要区分TP3和TP5+的不同做法,避免用户混淆。例如,在TP5中,I函数可能不再推荐,而是使用Request类的实例方法。 最后,生成相关问题,帮助用户进一步了解,比如如何接收GET参数,或者处理Ajax请求。</think>在ThinkPHP框架中接收POST请求参数有以下几种常用方法,具体实现方式根据版本略有差异: ### 一、使用I方法(ThinkPHP3.x推荐) 语法格式:$I('post.参数名')$ ```php // 获取单个参数 $username = I('post.username'); // 获取全部POST参数 $data = I('post.'); // 带默认值和过滤方法 $age = I('post.age', 18, 'intval'); // 默认18,转为整型 ``` ### 二、使用Request对象(ThinkPHP5.x/6.x推荐) ```php use think\Request; // 获取单个参数 $request = Request::instance(); $title = $request->post('title'); // 快捷方法(控制器中) $content = $this->request->post('content'); ``` ### 三、获取全部POST参数 ```php // TP3.x $allPost = I('post.'); // TP5.x+ $allPost = $this->request->post(); ``` ### 四、处理JSON数据(API开发常用) ```php // 获取原始输入流 $json = file_get_contents('php://input'); $data = json_decode($json, true); // TP5.x+专用方法 $data = $this->request->param(); // 自动识别Content-Type ``` ### 完整示例代码(TP5.x控制器) ```php namespace app\index\controller; use think\Controller; use think\Request; class User extends Controller { public function create() { // 获取单个参数 $username = $this->request->post('username'); // 获取全部参数 $data = $this->request->post(); // 带默认值 $age = $this->request->post('age', 20); // 返回JSON响应 return json(['code' => 200, 'data' => $data]); } } ``` ### 注意事项: 1. 安全过滤建议使用内置方法: ```php $filtered = $this->request->post('email', '', 'htmlspecialchars,trim'); ``` 2. 验证参数是否存在: ```php if (!$this->request->hasPost('username')) { return '参数缺失'; } ``` 3. 文件上需使用单独方法: ```php $file = $this->request->file('image'); ``` [^1]: ThinkPHP3.x通过I方法支持多种参数获取方式 [^2]: TP5.x路由配置支持定义POST请求专属路由 [^3]: 处理JSON数据时需要特别注意Content-Type设置 [^4]: 返回数据建议使用ajaxReturn保持格式统一
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值