Как я могу получить ответ от guzzle 6 в Laravel 5.3?

Я читал отсюда: http://www.phplab.info/categories/laravel/consume-external-api-from-laravel-5-using-guzzle-http-client

Я пробую вот так:

...
use GuzzleHttp\Client as GuzzleHttpClient;
use GuzzleHttp\Exception\RequestException;
...
public function testApi()
{
    try {
        $client = new GuzzleHttpClient();
        $apiRequest = $client->request('POST', 'https://myshop/api/auth/login', [
            // 'query' => ['plain' => 'Ab1L853Z24N'],
            'Accept' => 'application/json',
            'Content-Type' => 'application/json',
            'auth' => ['[email protected]', '1234'],       //If authentication required
            // 'debug' => true                                  //If needed to debug   
        ]);
        $content = json_decode($apiRequest->getBody()->getContents());
        dd($content);
    } catch (RequestException $re) {
          //For handling exception
    }
}

При выполнении результат равен нулю

Как я могу получить ответ?

Я пробую в почтальоне, успех получил ответ

Но я пытаюсь использовать жрать, это не удалось

Обновление:

Проверяю на почтальоне, результат работает

Я пытаюсь нажать код кнопки на почтальоне

Затем я выбираю php curl и копирую его, результат такой:

<?php

$curl = curl_init();

curl_setopt_array($curl, array(
  CURLOPT_URL => "https://myshop/api/auth/login",
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => "",
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 30,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => "POST",
  CURLOPT_POSTFIELDS => "------WebKitFormBoundary7MA4YWxkTrZu0gW\r\nContent-Disposition: form-data; name=\"email\"\r\n\r\[email protected]\r\n------WebKitFormBoundary7MA4YWxkTrZu0gW\r\nContent-Disposition: form-data; name=\"password\"\r\n\r\n1234\r\n------WebKitFormBoundary7MA4YWxkTrZu0gW--",
  CURLOPT_HTTPHEADER => array(
    "cache-control: no-cache",
    "content-type: multipart/form-data; boundary=----WebKitFormBoundary7MA4YWxkTrZu0gW",
    "postman-token: 1122334455-abcd-edde-aabe-adaddddddddd"
  ),
));

$response = curl_exec($curl);
$err = curl_error($curl);

curl_close($curl);

if ($err) {
  echo "cURL Error #:" . $err;
} else {
  echo $response;
}

Если он использует curl php, такой код

Как я могу получить ответ, если он использует жрать?


person Success Man    schedule 24.05.2017    source источник
comment
Почему мой вопрос получил отрицательный ответ? Есть ошибка?   -  person Success Man    schedule 24.05.2017


Ответы (1)


Я вижу как минимум одну синтаксическую ошибку. Третий аргумент метода request() должен выглядеть так:

$requestContent = [
    'headers' = [],
    'json' = []
];

В вашем случае это может быть:

public function testApi()
{
    $requestContent = [
        'headers' => [
            'Accept' => 'application/json',
            'Content-Type' => 'application/json'
        ],
        'json' => [
            'email' => '[email protected]',
            'password' => '1234',
            // 'debug' => true
        ]
    ];

    try {
        $client = new GuzzleHttpClient();

        $apiRequest = $client->request('POST', 'https://myshop/api/auth/login', $requestContent);

        $response = json_decode($apiRequest->getBody());

        dd($response);
    } catch (RequestException $re) {
          // For handling exception.
    }
}

Вместо json для ваших данных есть другие параметры, например form_params. Предлагаю вам ознакомиться с документацией Guzzle.

person louisfischer    schedule 24.05.2017
comment
Если $ httpContent изменится на $ requestContent - person Success Man; 24.05.2017
comment
Результат пуст - person Success Man; 24.05.2017
comment
Да это то же самое - person Success Man; 24.05.2017
comment
Это странно. Я использую почтальон и phpcurl, он может получить ответ. Кажется, есть код, который нужно добавить - person Success Man; 24.05.2017
comment
Когда вы используете Postman, какое тело вы используете? form-data или x-www-form-urlencoded? - person louisfischer; 24.05.2017
comment
Не могли бы вы показать нам (например, скриншот) часть, где вы объявляете тело в Postman? - person louisfischer; 24.05.2017
comment
Ах, вы меня опередили :) Хорошо, тогда проблема только в том, что вы неправильно формируете свой запрос с помощью Guzzle. Проверьте мой обновленный ответ. - person louisfischer; 24.05.2017
comment
Это то же самое. Использую жрать 6. Может проблема в написании синтаксиса - person Success Man; 24.05.2017
comment
Вы действительно отправляете запрос, как я написал в своем ответе? Потому что это работает на моей стороне. - person louisfischer; 24.05.2017