Как отправить запрос на внешний API - PullRequest
15 голосов
/ 03 ноября 2011

Я новичок в Symfony2 и пытаюсь отправить

new Request()

к и внешнему API. Это то, что у меня есть, но я не знаю, правильно ли это использовать встроенную библиотеку запросов / ответов.

$request = new Request('https://myservice.com/apimethod?foo=bar', 'GET'); 

Может кто-нибудь сказать мне, будет ли возвращен ответ, если существует API, который я пытаюсь вызвать? Если нет, то что я делаю не так?

Ответы [ 4 ]

18 голосов
/ 03 ноября 2011

В Symfony2 класс Request представляет собой HTTP-запрос на ваш сайт. Обычно, если вы переходите на www.yoursite.com/someaction, Symfony создает экземпляр объекта Symfony\Component\HttpFoundation\Request. Этот объект содержит методы, которые можно использовать для проверки HTTP-запроса (например, для проверки наличия в нем переменных GET или POST.)

Это хорошее объяснение Основ Symfony и HTTP . Я также рекомендую просмотреть исходный код для запроса, чтобы увидеть, что именно он может сделать.

Чтобы добиться того, что вы пытаетесь сделать в своем примере, вам нужно использовать cURL . Я лично использую класс-оболочку поверх cURL, который вы можете найти здесь .

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

7 голосов
/ 22 марта 2015

https://github.com/CircleOfNice/CiRestClientBundle

Это самый простой способ отправить запрос во внешний API.Он предоставляет все методы http как функции и прост в использовании.

$restClient = $this->container->get('ci.restclient');

$restClient->get('http://www.someUrl.com');
$restClient->post('http://www.someUrl.com', 'somePayload');
$restClient->put('http://www.someUrl.com', 'somePayload');
$restClient->delete('http://www.someUrl.com');
$restClient->patch('http://www.someUrl.com', 'somePayload');

$restClient->head('http://www.someUrl.com');
$restClient->options('http://www.someUrl.com', 'somePayload');
$restClient->trace('http://www.someUrl.com');
$restClient->connect('http://www.someUrl.com');

Если вы хотите использовать остальные клиенты только для объектов CRUD, тогда я думаю, что вам стоит взглянуть на

https://github.com/CircleOfNice/DoctrineRestDriver

, который помогает вам избавиться от ручной отправки запросов и отображения ответов, потому что Doctrine выполняет эту работу за вас.

// Sends a GET request to http://$driverUrl/@TableAnnotation/1 and returns a valid MyEntity Entity
$entity = $em->find("Some\Namespace\MyEntity", 1);
2 голосов
/ 02 мая 2013

Кто-то еще ответил на вопрос, подобный этому: https://stackoverflow.com/a/10715549/2306587

Вам не нужно полагаться на cURL, чтобы сделать внешний запрос. Существует Symfony-Bundle, который может справиться с этим: http://knpbundles.com/sonata-project/SonataGoutteBundle

1 голос
/ 20 июня 2017

Используйте Guzzle от здесь .

Например:

$client = new \GuzzleHttp\Client();
$res = $client->request('GET', 'https://api.github.com/repos/guzzle/guzzle');
echo $res->getStatusCode();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...