2016-09-01 3 views
0

Я действительно разочарован в данный момент и могу использовать помощь кого-то более опытного с Guzzle.Невозможно POST булевых значений в Guzzle 6 HTTP Client

Я подключаюсь к API, для которого требуется логическое значение, если я хочу получить ответ кода сообщения с сервера API вместо полного ответа на ссылку.

Вот примеры разницы между этими двумя типами возврата, как доступ по сырой HTTP-клиент (Почтальон):

Логического код включен: enter image description here

Логического код отключен: enter image description here

Проблема, с которой я сталкиваюсь, заключается в том, что когда я делаю тот же запрос с помощью Guzzle 6, я всегда получаю полный ответ на ссылку и никогда не получаю логическое значение в используемом тело сообщения. Кажется, что логический параметр становится строгим как «истинный» (это мое предположение).

Поэтому следующие два запроса POST производят точно такой же результат:

 // define request parameters 
     $this->req_body = [ 
      'email' => $encrypted_email, 
      'code' => true 
     ]; 

     // request url 
     $request_url = $api_endpoint . self::RETURN_TYPE; 

     // instance of Guzzle Client 
     $client = $this 
        ->client(); 

     // abstract connection 
     // XXX: this request needs no headers 
     $response = $client 
         ->post($request_url, array(
          'form_params' => $this->req_body 
         )); 
     // real data 
     $data = $response 
         ->getBody() 
         ->getContents(); 

     // send output 
     $this->response = $data; 

И если я пытаюсь с параметром code формы закомментированного:

 // define request parameters 
     $this->req_body = [ 
      'email' => $encrypted_email\\, 
      //'code' => true 
     ]; 

     // request url 
     $request_url = $api_endpoint . self::RETURN_TYPE; 

     // instance of Guzzle Client 
     $client = $this 
        ->client(); 

     // abstract connection 
     // XXX: this request needs no headers 
     $response = $client 
         ->post($request_url, array(
          'form_params' => $this->req_body 
         )); 
     // real data 
     $data = $response 
         ->getBody() 
         ->getContents(); 

     // send output 
     $this->response = $data; 

Возвращенный ответ API всегда: "{"success":{"code":200,"message":"https:\/\/webservices.bvdpetroleum.com\/users\/user-password-reset\/q8VqSAbfTOkW0EMvSTfK5qSS4zr28rSwdQy3D\/uc9wtz3+RI4LH7hDkh\/ZbTfqcC"}}"

Как отправить Boolean значений в Guzzle 6 form_params массив? Любое понимание было бы весьма благодарным, потому что я не хочу переключаться на CURL.

Спасибо!

ответ

3

Просто измените form_params массив для передачи в json сообщению теле :)

$response = $client->post($request_url, array(
       'json' => $this->req_body 
      )); 
+0

Это, конечно, сделали трюк благодаря – DrewT

+0

@DrewT любого обходному пути, когда мы хотим опубликовать файл? –

+0

@terrylow yes, для POST файла вам нужно использовать '' multipart/form-data'' вместо '' json'' или '' form-params''. Документы описывают этот процесс здесь: http://guzzle.readthedocs.io/en/latest/request-options.html?highlight=getconfig#multipart – DrewT

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