我是Symfony2的新手,我正在尝试发送
new Request()
和外部API。这就是我所拥有的,但我不知道它是否正确使用了内置的请求/响应库。
$request = new Request('https://myservice.com/apimethod?foo=bar', 'GET');
如果我试图调用的API存在,有人能告诉我这是否会返回响应吗?!如果没有,我做错了什么?
答案 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();