2016-08-04 6 views
0

Как получить ответ, когда я отправляю запрос с помощью Guzzle Я использую "guzzle/guzzle": "^3.9", Я отправляю запрос на некоторый url, и мне нужно тело ответа, но с Guzzle я не нахожу, что это ответ, где используется стандартный php функция file_get_contents у меня есть ответ корпус. Как в Guzzle het тело ответа?Как получить тело ответа в Guzzle

$guzzle = new Client(); 
$postCell = $guzzle 
    ->post($url, [], $addProtectedRangeJson) 
    ->addHeader('Authorization', 'Bearer ' . $arrayAccessTokenClient) 
    ->addHeader('Content-type', 'application/json') 
; 

$postCell 
    ->send() 
    ->getBody(true) 
; 

$contents = (string) $postCell->getBody(); // get body that I post -> my request, not response 
$contents = $postCell->getBody()->getContents(); // not find getContents, ask me did you mean to call getContentMd5 
$answer = json_decode($postCell->getResponse()->getBody(), true); 

return $answer; 

Теперь $answer:

result = {Guzzle\Http\EntityBody} [7] 
readWriteHash = {array} [2] 
contentEncoding = false 
rewindFunction = null 
stream = {resource} resource id='77' type='stream' 
size = null 
cache = {array} [9] 
wrapper_type = "PHP" 
stream_type = "TEMP" 
mode = "w+b" 
unread_bytes = 0 
seekable = true 
uri = "php://temp" 
is_local = true 
is_readable = true 
is_writable = true 
customData = {array} [1] 
default = true 

Стараюсь $contents = (string) $postCell->getBody(); но у меня есть запрос, а не ответ, но мне нужен ответ

 $url = 'some_url'; 
    $opts = array('http' => 
     array(
      'method' => 'POST', 
      'header'=>"Content-type: application/json\r\n" . 
       "Authorization: Bearer $arrayAccessTokenClient\r\n", 
      'content' => $addProtectedRangeJson 
     ) 
    ); 
    // Creating the context for the request 
    $context = stream_context_create($opts); 
    $response = file_get_contents($url, FALSE, $context); 
    $responseData = json_decode($response, TRUE); 

Как получить тело ответа в жрать ??

Стараюсь HTTP жрать

$headers = [ 
     'Authorization' => 'Bearer ' . $arrayAccessTokenClient, 
     'Content-type' => 'application/json' 
    ]; 
    $guzzle = new \GuzzleHttp\Client($headers); 

    $request = $guzzle 
     ->post('https://sheets.googleapis.com/v4/spreadsheets/' . $spreadsheetId . ':batchUpdate', 
      $addProtectedRange 
     ); 
    $response = $request->getBody()->getContents(); 

    return $response; 

Но есть 401? hot добавить заголовок?

UPDATE

$headers = [ 
     'Authorization' => 'Bearer ' . $arrayAccessTokenClient, 
     'Content-type' => 'application/json' 
    ]; 
    $guzzle = new \GuzzleHttp\Client(); 
    $request = new Request('POST', 'https://sheets.googleapis.com/v4/spreadsheets/' . $spreadsheetId . ':batchUpdate', $headers); 
    $response = $guzzle 
     ->send($request, $addProtectedRange); 

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

    return $answer; 

но есть

"Catchable Fatal Error: Argument 1 passed to GuzzleHttp\\Client::send() must be an instance of Psr\\Http\\Message\\RequestInterface, instance of Guzzle\\Http\\Message\\Request given, called in /home/ivan/host/aog-code/src/Artel/SiteBundle/Helper/GoogleSpreadSheetHelper.php on line 144 and defined" 
+0

маркированы как дубликат, но не поставить ссылку на дубликат? Хороший! –

ответ

0
To retrieve all the data, you can use casting operator: 

$contents = (string) $response->getBody(); 

You can also do it with 

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

The difference between the two approaches is that getContents returns the remaining contents, so that a second call returns nothing unless you seek the position of the stream with rewind or seek . 

$stream = $response->getBody(); 
$contents = $stream->getContents(); // returns all the contents 
$contents = $stream->getContents(); // empty string 
$stream->rewind(); // Seek to the beginning 
$contents = $stream->getContents(); // returns all the contents 
Instead, usings PHP's string casting operations, it will reads all the data from the stream from the beginning until the end is reached. 

$contents = (string) $response->getBody(); // returns all the contents 
$contents = (string) $response->getBody(); // returns all the contents 
+0

'' guzzle/guzzle ":"^3.9 "' не иметь 'getContents()' в '$ response-> getBody()' возможно, вы имеете в виду 'guzzlehttp/guzzle' ?? –

+0

yes using Guzzlehttp/Guzzle –

+0

Как добавить заголовок в 'Guzzlehttp/Guzzle'? I uopdate question –

2

я найти решение

 $headers = [ 
     'Authorization' => 'Bearer ' . $arrayAccessTokenClient, 
     'Content-type' => 'application/json' 
    ]; 
    $guzzle = new \GuzzleHttp\Client(); 
    $request = new \GuzzleHttp\Psr7\Request('POST', 'https://sheets.googleapis.com/v4/spreadsheets/' . $spreadsheetId . ':batchUpdate', $headers); 
    $response = $guzzle 
     ->send($request, ['body' => $addProtectedRangeJson]); 

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

    return $answer; 

 Смежные вопросы

  • Нет связанных вопросов^_^