如何向外部API发送请求

时间:2011-11-02 23:12:07

标签: api http syntax request symfony

我是Symfony2的新手,我正在尝试发送

new Request()

和外部API。这就是我所拥有的,但我不知道它是否正确使用了内置的请求/响应库。

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

如果我试图调用的API存在,有人能告诉我这是否会返回响应吗?!如果没有,我做错了什么?

4 个答案:

答案 0 :(得分:18)

在Symfony2中,Request类表示对您的站点发出的HTTP请求。基本上,如果你去www.yoursite.com/someaction Symfony实例化一个Symfony\Component\HttpFoundation\Request对象。此对象包含可用于检查HTTP请求的方法(例如,查看它是否包含GET或POST变量。)

这是Symfony and HTTP fundamentals的一个很好的解释。我还建议查看Request的源代码,看看它能做些什么。

为了实现您在示例中尝试执行的操作,您需要使用cURL。我个人在cURL之上使用了一个包装类,你可以找到here

希望这有帮助。

答案 1 :(得分:7)

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 :(得分:2)

其他人回答了这样的问题:https://stackoverflow.com/a/10715549/2306587

您不必依赖cURL来发出外部请求。有一个Symfony-Bundle可以处理:http://knpbundles.com/sonata-project/SonataGoutteBundle

答案 3 :(得分:1)

使用来自here的Guzzle。

例:

$client = new \GuzzleHttp\Client();
$res = $client->request('GET', 'https://api.github.com/repos/guzzle/guzzle');
echo $res->getStatusCode();