2016-08-04 27 views
0

Wie bekomme ich Antwort wenn ich Anfrage mit Guzzle ich "guzzle/guzzle": "^3.9", Post ich für einige URL Anfrage und ich brauche Antwort Körper, aber mit Guzzle ich nicht finden, das ist Antwort, wo verwenden Standard-PHP Funktion file_get_contents Ich habe Antwort Körper. Wie in Guzzle Antwort Körper?Wie bekomme ich Antwort Körper in 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; 

Jetzt $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 

Ich versuche $contents = (string) $postCell->getBody(); aber mein Wunsch haben, nicht Antwort, aber ich brauche Antwort

 $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); 

Wie Antwort Körper in Guzzle bekommen ??

Ich versuche http verputzen

$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; 

Aber 401 haben? heiß um Header hinzuzufügen?

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; 

aber haben

"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

als Duplikat markiert, aber nicht setzen Sie den Link zum Duplikat? Schön! –

Antwort

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 "' habe nicht 'getContents()' in '$ response-> getBody()' vielleicht meinst du "guzzendhttp/guzzle" ?? –

+0

ja mit Guzzendhttp/Guzzle –

+0

wie Header zu 'Guzzehthtp/Guzzle' hinzufügen? Ich Frage –

2

I-Lösung finden

 $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;