php CURL问题

本地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)
阅读 2.9k
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);
    }
}
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题