Laravel - Guzzle Request / ошибка cURL 6: не удалось разрешить хост

Я пытаюсь сделать запрос API к Github API только для тестирования. Я установил последнюю версию Guzzle ("guzzle/guzzle": "^3.9") в своем приложении Laravel 5.1. В моем routes.php у меня есть следующий код:

Route::get('guzzle/{username}', function($username) {
    $client = new Client([
        'base_uri' => 'https://api.github.com/users/',
    ]);
    $response = $client->get("/users/$username");
    dd($response);
});

Если я сейчас зайду по URL-адресу domain.dev/github/kayyyy, я получу ошибку cURL error 6: Could not resolve host: users.

Почему я получаю эту ошибку?

Если я зайду на https://api.github.com/users/kayyyy, я увижу json выход.

Я также использую Homestead / Vagrant. Возможно, это проблема, которую хост не может решить?

EDIT Если я попробую это без base_uri, это сработает.

Route::get('guzzle/{username}', function($username) {
   $client = new GuzzleHttp\Client();
    $response = $client->get("https://api.github.com/users/$username");
    dd($response);
});

person bobbybackblech    schedule 10.08.2015    source источник


Ответы (4)


Почему ты звонишь $client->get->()->send()? В частности, почему вы связываете метод send() в конце? Документация не добавляет метод send() при демонстрации того, что кажется одним и тем же действием:

http://guzzle.readthedocs.org/en/latest/quickstart.html#creating-a-client

Кроме того, рассматривали ли вы последствия этого утверждения на цитируемой выше странице руководства?

Когда клиенту предоставляется относительный URI, клиент комбинирует базовый URI с относительным URI, используя правила, описанные в RFC 3986, раздел 2.

person Ben Johnson    schedule 10.08.2015

На самом деле интерполяция переменных невозможна в одинарных кавычках. Это означает, что вы в настоящее время вызываете users/$username, а переменная $username не заменяется ее значением.

Для того, чтобы получить его, вы должны использовать его одним из следующих способов:

$response = $client->get("users/$username")->send();
$response = $client->get('users/' . $username)->send();

Я лично предпочитаю второй, так как предполагается, что он быстрее.

person M. Sabev    schedule 10.08.2015
comment
Спасибо за ваш ответ. Да, но это не сработало, все та же ошибка. - person bobbybackblech; 10.08.2015

Хорошо, я решил это, глупая ошибка с моей стороны. Я использовал new Client.

А должно быть конечно new GuzzleHttp\Client

Поскольку это только для тестирования в моем routes.php, я не Namespace

Спасибо за вашу помощь всем.

person bobbybackblech    schedule 10.08.2015

Спасибо Paratron https://github.com/googleapis/google-api-php-client/issues/1184#issuecomment-355295789 В моем случае на cakephp 3.8 и docker 19.03.5 я столкнулся с ошибкой curl из-за какой-то проблемы с сетью. Я перезапустил свой док-контейнер Cake-Server, и он сработал как шарм.

person Sarmad Baloch    schedule 11.12.2019