首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Symfony2 -如何执行外部请求

Symfony2 -如何执行外部请求
EN

Stack Overflow用户
提问于 2012-10-25 23:32:53
回答 5查看 59K关注 0票数 28

使用Symfony2,我需要访问基于HTTPS的外部API。

如何调用外部URI并管理响应以“播放”它。例如,呈现成功还是失败消息?

我的想法类似于(请注意,performRequest是一个完全虚构的方法):

代码语言:javascript
复制
$response = $this -> performRequest("www.someapi.com?param1=A&param2=B");

if ($response -> getError() == 0){
    // Do something good
}else{
    // Do something too bad
}

我一直在读关于Buzz和其他客户的文章。但我猜Symfony2应该能够自己做到这一点。

EN

回答 5

Stack Overflow用户

发布于 2012-10-26 00:37:53

Symfony没有内置的服务,但这是使用依赖注入框架创建自己的服务的绝佳机会。您在这里可以做的是编写一个服务来管理外部调用。让我们将该服务命名为"http“。

首先,使用performRequest()方法编写一个类:

代码语言:javascript
复制
namespace MyBundle\Service;

class Http
{    
    public function performRequest($siteUrl)
    {
        // Code to make the external request goes here
        // ...probably using cUrl
    }
}

app/config/config.yml中将其注册为服务

代码语言:javascript
复制
services:
    http:
        class: MyBundle\Service\Http

现在,您的控制器可以访问名为"http“的服务。Symfony在“容器”中管理这个类的一个实例,您可以通过$this->get("http")访问它

代码语言:javascript
复制
class MyController
{
    $response = $this->get("http")->performRequest("www.something.com");

    ...
}
票数 27
EN

Stack Overflow用户

发布于 2015-03-22 19:18:44

我所知道的最好的客户端是:http://docs.guzzlephp.org/en/latest/

已经存在将其集成到Symfony2项目中的包:https://github.com/8p/GuzzleBundle

代码语言:javascript
复制
$client   = $this->get('guzzle.client');

// send an asynchronous request.
$request = $client->createRequest('GET', 'http://httpbin.org', ['future' => true]);
// callback
$client->send($request)->then(function ($response) {
    echo 'I completed! ' . $response;
});

// optional parameters
$response = $client->get('http://httpbin.org/get', [
    'headers' => ['X-Foo-Header' => 'value'],
    'query'   => ['foo' => 'bar']
]);
$code = $response->getStatusCode();
$body = $response->getBody();

// json response
$response = $client->get('http://httpbin.org/get');
$json = $response->json();

// extra methods
$response = $client->delete('http://httpbin.org/delete');
$response = $client->head('http://httpbin.org/get');
$response = $client->options('http://httpbin.org/get');
$response = $client->patch('http://httpbin.org/patch');
$response = $client->post('http://httpbin.org/post');
$response = $client->put('http://httpbin.org/put');

更多信息请访问:http://docs.guzzlephp.org/en/latest/index.html

票数 14
EN

Stack Overflow用户

发布于 2012-10-26 01:57:09

https://github.com/sensio/SensioBuzzBundle似乎就是你要找的东西。

它实现了Kris Wallsmith buzz库来执行HTTP请求。

我会让你阅读github页面上的文档,用法非常基础:

代码语言:javascript
复制
$buzz = $this->container->get('buzz');

$response = $buzz->get('http://google.com');

echo $response->getContent();
票数 10
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13072097

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档