2016-11-04 4 views
0

У меня есть неплохой API. когда я бегу Почтальон по следующему URL-адресу, я получаю в ответ следующим образом:Guzzle 6.x/Не получил ожидаемый результат

POSTMAN RUN URL 
DELETE 
https://www.example.com/api/v1/Blog/blog/13 


     { 
     "status":"Failure", 
     "message":"The specified blog post could not be found" 
     } 

Вышесказанное, конечно, как ожидается, однако, я не могу читать в «статус» и «сообщение». Как мне получить ответ? Вот мой настоящий код:

 $entry_id = $this->uri->segment(3); 
     $theUrl = $this->config->item('base_url').'api/v1/Blog/blog/'.$entry_id; 
     // tested $theUrl and works 
     $client = new GuzzleHttp\Client([ 
     'base_uri' =>  $theUrl, 
     'timeout' =>  3.0, 
     'http_errors' => FALSE 
     ]); 
     $response = $client->delete($theUrl); 
     $code = $response->getStatusCode(); 
     $response = $client->delete($theUrl); 
     $x = $response->getBody(); 

echo "<pre>"; 
echo var_dump($x); // cannot see message or status anywhere. 
echo "</pre>"; 

Ваши предложения очень ценятся.

+++ я сейчас попробовал этот пересмотренный код, но до сих пор не может видеть состояние или дату сообщение в ответе:

$entry_id = $this->uri->segment(3); 

    $theUrl = $this->config->item('base_url').'api/v1/Blog/blog/'.$entry_id; 
    $client = new GuzzleHttp\Client([ 
     'timeout' =>  3.0, 
     'http_errors' => FALSE 
     ]); 
    $response = $client->delete($theUrl, ['debug' => true]); 
    $code = $response->getStatusCode(); 
    $x = $response->getBody(); 

    echo "<pre>"; 
    echo var_dump($x); 
    echo "</pre>"; 

    die(); 

Вот дамп и отладочная информация:

https://www.example.com/api/v1/Blog/blog/6 
* Hostname was found in DNS cache * Trying 104.131.132.25... * Connected to  
www.example.com (104.131.132.25) port 443 (#1) * successfully set 
certificate verify locations: * CAfile: none CApath: /etc/ssl/certs * SSL 
connection using XXXXXXXXXXXXXXXXXXXXXXXXX* Server certificate: * 
subject: CN=www.example.com * start date: 2016-10-29 05:15:00 GMT * expire 
date: 2017-01-27 05:15:00 GMT * subjectAltName: www.movinghaus.com matched 
* issuer: C=US; O=Let's Encrypt; CN=Let's Encrypt Authority X3 * SSL 
certificate verify ok. > DELETE /api/v1/Blog/blog/6 HTTP/1.1 User-Agent: 
GuzzleHttp/6.2.0 curl/7.35.0 PHP/5.5.9-1ubuntu4.11 Host: www.example.com < 
HTTP/1.1 200 OK < Date: Fri, 04 Nov 2016 03:55:21 GMT * Server Apache/2.4.7 
(Ubuntu) is not blacklisted < Server: Apache/2.4.7 (Ubuntu) < X-Powered-By: 
PHP/5.5.9-1ubuntu4.11 < Set-Cookie: 
PHPSESSID=XXXXXXXXXXXXXXXXXX; expires=Fri, 04-Nov-2016 05:55:21 GMT; Max- 
Age=7200; 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 < Content-Length: 40 < Content-Type: 
application/json; charset=utf-8 < * Connection #1 to host www.example.com 
left intact 


object(GuzzleHttp\Psr7\Stream)#65 (7) { 
["stream":"GuzzleHttp\Psr7\Stream":private]=> 
resource(50) of type (stream) 
["size":"GuzzleHttp\Psr7\Stream":private]=> 
NULL 
["seekable":"GuzzleHttp\Psr7\Stream":private]=> 
bool(true) 
["readable":"GuzzleHttp\Psr7\Stream":private]=> 
bool(true) 
["writable":"GuzzleHttp\Psr7\Stream":private]=> 
bool(true) 
["uri":"GuzzleHttp\Psr7\Stream":private]=> 
string(10) "php://temp" 
["customMetadata":"GuzzleHttp\Psr7\Stream":private]=> 
array(0) { 
} 
} 
+0

Try '$ response-> JSON();' – BVengerov

+0

Спасибо. Пробовал $ x = $ response-> json(); но получите следующую ошибку: Звонок на неопределенный метод GuzzleHttp \ Psr7 \ Response :: json() – user3264461

+0

, когда я делаю $ repsonse-> getBody(); Я получаю: object (GuzzleHttp \ Psr7 \ Stream) # 65 (7) { ["stream": "GuzzleHttp \ Psr7 \ Stream": private] => ресурс (49) типа (потока) ["размер" : «GuzzleHttp \ Psr7 \ Stream»: private] => NULL ["seekable": "GuzzleHttp \ Psr7 \ Stream": private] => bool (true) ["readable": "GuzzleHttp \ Psr7 \ Stream ": private] => bool (true) [" writeable ":" GuzzleHttp \ Psr7 \ Stream ": private] => bool (true) [" uri ":" GuzzleHttp \ Psr7 \ Stream ": private] => строка (10) "php: // temp" ["customMetadata": "GuzzleHttp \ Psr7 \ Stream": private] => array (0) { } } no СТАТУС или СООБЩЕНИЕ – user3264461

ответ

1

Я думаю, что параметр base_uri для нового GuzzleHttp \ Client не нужен. Параметр base_uri используется для установки базового url. (http://docs.guzzlephp.org/en/latest/quickstart.html?highlight=base_uri) Все вызовы клиенту должны затем использовать относительный uris. Поскольку вы используете абсолютный URL-адрес в вызове функции удаления, вам не нужен параметр base_uri.

Также вы дважды вызываете функцию удаления: $ response = $ client-> delete ($ theUrl).

0

В соответствии с docs. Вы должны сделать

$x = $response->getBody()->getContents(); 

Или бросить body к string:

$x = (string)$response->getBody() 
Смежные вопросы