2016-04-30 4 views
1

Я использую guzzle 6 в laravel 5 для отправки запроса на отправку, но я получаю ERR_INVALID_CHUNKED_ENCODING, когда пытаюсь получить доступ к запросу() в методе, который обрабатывает почтовый запрос.Возвращающий объект ответа GuzzleHttp вызывает ERR_INVALID_CHUNKED_ENCODING в браузере

Вот мой код:

routes.php

Route::get('/guzzle', [ 
    'as' => 'guzzle-test', 
    'uses' => '[email protected]' 
]); 

Route::post('/guzzle', [ 
    'as' => 'guzzle-post-test', 
    'uses' => '[email protected]' 
]); 

TestController.php

public function getTest() 
{ 
    $client = new Client(); 

    $data = [ 
     'hey' => 'ho' 
    ]; 

    $request = $client->post(route('guzzle-post-test'), [ 
     'content-type' => 'application/json' 
    ], json_encode($data)); 

    return $request; 
} 

public function postTest() 
{ 
    dd(getTest()); 
} 

Я получаю к проводнику после запроса, так как я пытался diedump строку и ее попадает туда, но если я назову request(), я получаю эту ошибку. Для того, что я исследовал, у него может быть что-то с длиной содержимого, но после прочтения документации и некоторых материалов в Интернете я мог бы найти, как правильно получить и передать длину контента в запросе. Любая помощь будет очень оценена!

ответ

1

Во-первых, вот некоторые тестовый код, который вы должны быть в состоянии адаптировать для ваших целей (также см form_params в документации для GuzzleHttp):

public function validateRecaptcha() 
{ 
    $client = new Client; 
    $response = $client->request('POST', 'https://www.google.com/recaptcha/api/siteverify', [ 
      'form_params' => [ 
       'secret' => env('RECAPTCHA_SECRET'), 
       'response' => Request::input('g-recaptcha-response'), 
       'remoteip' => Request::ip() 
      ] 
    ]); 

    return $response; 
} 

Я просто побежал в ту же проблему и обнаружили, что попытка вернуть объект ответа в Laravel дал мне ERR_INVALID_CHUNKED_ENCODING. Принимая во внимание, делая dd() на ответ сам показал мне, что я на самом деле хотел увидеть:

public function validateRecaptcha() 
{ 
    $client = new Client; 
    $response = $client->request('POST', 'https://www.google.com/recaptcha/api/siteverify', [ 
      'form_params' => [ 
       'secret' => env('RECAPTCHA_SECRET'), 
       'response' => Request::input('g-recaptcha-response'), 
       'remoteip' => Request::ip() 
      ] 
    ]); 

    dd($response); 
} 

К сожалению, не делая дальнейших исследований, я не могу объяснить, почему ERR_INVALID_CHUNKED_ENCODING продолжает идти вверх, когда я пытаюсь вернуть объекты клиентской библиотеки в браузере, но мой первоначальный наклон заключается в том, что это проблема с типом данных.

Что касается вашего вопроса, вы на самом деле не пытаетесь вернуть «запрос», а ответ . Согласно http://docs.guzzlephp.org/en/latest/quickstart.html#using-responses, если вы хотите получить ответ API, содержащийся в объекте ответа (или, по крайней мере, в моем случае, я сделал), вы хотите использовать getBody() метод:

public function validateRecaptcha() 
{ 
    $client = new Client; 
    $response = $client->request('POST', 'https://www.google.com/recaptcha/api/siteverify', [ 
      'form_params' => [ 
       'secret' => env('RECAPTCHA_SECRET'), 
       'response' => Request::input('g-recaptcha-response'), 
       'remoteip' => Request::ip() 
      ] 
    ]); 

    return $response->getBody(); 
} 

И тогда, конечно, , если вы ожидаете, что это ответ JSON (т. е. REST), а затем просто передайте его json_decode(), чтобы вернуть ваш ассоциативный массив.

public function validateRecaptcha() 
{ 
    $client = new Client; 
    $response = $client->request('POST', 'https://www.google.com/recaptcha/api/siteverify', [ 
      'form_params' => [ 
       'secret' => env('RECAPTCHA_SECRET'), 
       'response' => Request::input('g-recaptcha-response'), 
       'remoteip' => Request::ip() 
      ] 
    ]); 

    return json_decode($response->getBody(), true); // true = assoc. array 
} 

Надеюсь, что это поможет!

+0

Спасибо за ваш ответ! Это очень полезно! –

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