首页 > php CURL问题

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)

这样写吧楼主

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);
    }
}
【热门文章】
【热门文章】