Gab*_*ron 13 html php http httprequest symfony
我正在尝试从我的一个控制器发出HTTP请求以联系另一个URL,目标是联系另一个URL,并在我的页面中打印HTML答案.我试过了 :
$r = new Request();
$r->create('http://www.google.com', 'GET');
return $this->render(...mytemplate..., array('name' => $r->getContent());
Run Code Online (Sandbox Code Playgroud)
我的模板只是打印变量"name".
现在,当我这样做时,没有任何回报.在我看来,请求永远不会被发送,这就是为什么没有返回.
我的问题是:如何发送请求并获取响应内容?
提前致谢.
gre*_*emo 18
编辑:我为Buzz浏览器制作了一个GremoBuzzBundle.它与SensioBuzzBundle类似,但它有一些不错的配置选项.
我建议使用Buzz浏览器和依赖注入.Buzz是cURL或file_get_contents的包装器.编辑deps
添加以下行的文件:
[Buzz]
git=https://github.com/kriswallsmith/Buzz.git
target=/buzz
Run Code Online (Sandbox Code Playgroud)
然后安装供应商以实际下载库:
php bin/vendors install
Run Code Online (Sandbox Code Playgroud)
然后添加两个服务(src/YourCompany/YourBundle/Resources/config/services.yml
):
# cURL client for Buzz
buzz.client.curl:
class: Buzz\Client\Curl
public: false
calls:
- [setVerifyPeer, [false]]
# Buzz browser
buzz.browser:
class: Buzz\Browser
arguments: ['@buzz.client.curl']
Run Code Online (Sandbox Code Playgroud)
第一个服务是客户端(我更喜欢cURL而不是file_get_contents),后者是浏览器本身.最后一步是在autoloader(app/autoload.php
)中添加一行代码:
$loader->registerNamespaces(array(
'Buzz' => __DIR__.'/../vendor/buzz/lib',
));
Run Code Online (Sandbox Code Playgroud)
然后,您可以在控制器代码中获取服务并使用浏览器:
$browser = $this->get('buzz.browser');
$response = $browser->get('http://www.google.com');
Run Code Online (Sandbox Code Playgroud)
Pet*_*ley 17
两个问题.
首先,这不是正确的用法Symfony\Component\HttpFoundation\Request::create()
,它是各种静态初始化器/工厂.您的代码应如下所示
$r = Request::create( 'http://www.google.com', 'GET' );
Run Code Online (Sandbox Code Playgroud)
现在你有了一个合适的Request对象.然而,这是无关紧要的,这是你的第二个问题:这不是Symfony的请求对象的设计工作方式.它的目的不是执行 HTTP请求,而是将它们表示为框架中的对象.
长话短说,你不能这样做.也许您可以使用cURL来抓取您想要的页面?
我建议你使用GuzzleHttp客户端 - 我知道的最好的客户端:http://docs.guzzlephp.org/en/latest/
已经很好的捆绑将它集成到Symfony2项目中:https: //github.com/8p/GuzzleBundle
然后从你的控制器你可以打电话:
$client = $this->get('guzzle.client');
// GET request with parameters
$response = $client->get('http://httpbin.org/get', [
'headers' => ['X-Foo-Header' => 'value'],
'query' => ['foo' => 'bar']
]);
$code = $response->getStatusCode();
$body = $response->getBody();
Run Code Online (Sandbox Code Playgroud)
有关更多信息,请访问:http://docs.guzzlephp.org/en/latest/index.html
为什么不使用卷曲?从PHP手册
$ch = curl_init("http://www.example.com/");
curl_setopt($ch, CURLOPT_FILE, $fp);
curl_setopt($ch, CURLOPT_HEADER, 0);
result = curl_exec($ch);
curl_close($ch);
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
55316 次 |
最近记录: |