Creating a http Client in Cake 3

落爺英雄遲暮 提交于 2019-12-25 11:25:22

问题


I am having trouble getting a response from an API using a http Client in Cake PHP 3

I want to send the following GET request but I cannot manage to return a result. If visit this url with a browser i get a response.

http://XX.XX.XX.XX:8020/mvapireq/?apientry=newuseru&authkey=XXXXXXXXXX&u_username=NEWUSERNAME&u_password=PASSWORD&u_name=NAME&u_email=EMAIL&u_phone=PHONE&u_currency=USD&u_country=USA&u_address=x&deviceid=DEVICEID&now=555

When I try to send the same request with http Client my reponse object is always null

use Cake\Network\Http\Client;
use Cake\Network\Http\Response;

public function foo(){    
    $http = new Client();
    $data = [
        'apientry' => 'newuseru',
        'authkey' => 'XXXXXXXX',
        'u_username' => 'NEWUSERNAME',
        'u_password' => 'PASSWORD',
        'u_name' => 'NAME',
        'u_email' => 'EMAIL',
        'u_phone' => 'PHONE',
        'u_currency' => 'USD',
        'u_country' => 'USA',
        'u_address' => 'x',
        'deviceid' => 'DEVICEID',
        'now' => '555'
    ];

    $response = $http->get('http://XX.XX.XX.XX:8020/mvapireq', $data);

    debug($response->body);
    debug($response->code);
    debug($response->headers);
}

This is the results from the debug() it seems to me like the request is not being sent.

Notice (8): Trying to get property of non-object [APP/Controller/UsersController.php, line 1159]

/src/Controller/UsersController.php (line 1159)

null

Notice (8): Trying to get property of non-object [APP/Controller/UsersController.php, line 1160]

/src/Controller/UsersController.php (line 1160)

null

Notice (8): Trying to get property of non-object [APP/Controller/UsersController.php, line 1161]

/src/Controller/UsersController.php (line 1161)

null

/src/Controller/UsersController.php (line 1163)

null

I've tried many different ways of structuring $http and all of them have returned the same result. I really can't figure out whats going wrong. Any help would be great.


回答1:


You can specify hostname and port in the constructor of the Client:

<?php  
 use Cake\Network\Http\Client;
 // ....
 public function foo(){    

    $http = new Client([
        'hostname' => 'XX.XX.XX.XX',
        'port' => '8020'
    ]);

 $data = [
    'apientry' => 'newuseru',
    //....
    'now' => '555'
 ];

 $response = $http->get('/mvapireq', $data);
 // ...
}

And check your system:

  • firewall (os)
  • allow_url_fopen (in your php runtime configuration)


来源:https://stackoverflow.com/questions/37613517/creating-a-http-client-in-cake-3

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!