php CURL问题
大家讲道理
大家讲道理 2017-04-11 09:47:09
[PHP讨论组]

本地wamp环境,配置虚拟机,demo.com。
两个控制器,想用TestA中的方法请求TestB中的方法,然后看到返回值。但是结果却不是我想要的。
哪位大神能帮我指出错误???不胜感激!!!

以下是代码
class TestA
{
    public function actionPost()
    {
        $url = 'dsp.com/Testb/Require_post';
        $data = array(
            'name' => 'ethan',
            'gender' => 'male',
        );
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, $url);
        curl_setopt($ch, CURLOPT_HEADER,1);  
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
        curl_setopt($ch, CURLOPT_POST,1);
        curl_setopt($ch, CURLOPT_POSTFIELDS, $data);      
        curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/json'));
    
        $result = curl_exec($ch); 
        curl_close($ch);      
        print_r($result);
    }
}


class TestB
{
    public function actionRequire_post()
    {
        $post = $_POST;
        print_r($post);
    }
}
以下是返回结果
string 'HTTP/1.1 302 Found
Date: Wed, 03 Aug 2016 07:38:51 GMT
Server: Apache/2.4.9 (Win32) PHP/5.5.12
X-Powered-By: PHP/5.5.12
Set-Cookie: PHPSESSID=v4hpec5krlhgq17r1oehoo6md6; path=/; HttpOnly
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Pragma: no-cache
Location: http://dsp.com/Index/Index
Content-Length: 0
Content-Type: text/html

' (length=413)
大家讲道理
大家讲道理

光阴似箭催人老,日月如移越少年。

全部回复(3)
巴扎黑

这样写吧楼主

class TestA
{
    public function actionPost()
    {
        $url = 'dsp.com/Testb/Require_post';
        $data = array(
            'name' => 'ethan',
            'gender' => 'male',
        );
        
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, $url);
        curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
        //curl_setopt($ch, CURLOPT_POST,1);
        curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');
        
        //特别注意, 请求头设置为这样, $_POST是接收不到数据的,详情看下文
        //curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/json'));
    
        $result = curl_exec($ch); 
        curl_close($ch);      
        print_r($result);
    }
}


class TestB
{
    public function actionRequire_post()
    {
        $post = $_POST;
        print_r($post);
    }
}

你这里的Content-type 是 application/json ,服务端不会把他当做一个表单请求,也就不会去解析他。
$_POST 中的值是通过识别请求的header中的Content-type,是form-data才会去解析body中的数据,然后放到$_POST里。

还有特别不建议在写接口数据时print_r输出, 这样得到是一个string


class TestB
{
    public function actionRequire_post()
    {
        $post = $_POST;
        echo json_encode($post);
        exit;
    }
}
大家讲道理
$url = 'http://dsp.com/Testb/Require_post';  试试
天蓬老师
class TestA
{
    public function actionPost()
    {
        $url = 'dsp.com/Testb/Require_post';
        $data = array(
            'name' => 'ethan',
            'gender' => 'male',
        );
        $data = http_build_query($data);
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, $url);
        curl_setopt($ch, CURLOPT_HEADER,1);  
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
        curl_setopt($ch, CURLOPT_POST,1);
        curl_setopt($ch, CURLOPT_POSTFIELDS, $data);      
        //curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/json'));
    
        $result = curl_exec($ch); 
        curl_close($ch);      
        print_r($result);
    }
}


class TestB
{
    public function actionRequire_post()
    {
        $post = $_POST;
        print_r($post);
    }
}
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号