2

如何在没有标题或其他信息的情况下从BuzzBundle获取准确的内容

目前我正在使用,

 $buzz = $this->container->get('buzz');
 $response = $buzz->get('http://api.ipify.org?format=json');
 echo $response;

输出是,

HTTP/1.1 200 OK Server: Cowboy Connection: close Access-Control-Allow-Origin: * Content-Type: text/plain Date: Thu, 13 Nov 2014 14:51:40 GMT Content-Length: 14 Via: 1.1 vegur {"ip":"54.254.210.209"} 

这里只有{"ip":"111.20.67.90"}期望的响应。

或任何其他方式,使用不同的捆绑包,或者我必须直接在 PHP 代码中使用 curl ?

4

1 回答 1

1

对于后人来说,BuzzBundle只是一个将库注入 Symfony 的小配置Buzz文件

当您使用 的get()方法时,它会返回一个具有返回值Browser的实例... 所以让我们检查该文件call()MessageInterface

/**
 * Returns the message document.
 *
 * @return string The message
 */
public function __toString();

如果您熟悉 ,这只是一个头文件的等价物C++,但很明显该__toString()文件返回完整的消息,包括标题。因此,如果我们查看该文件的其余部分,我们会发现还有另一个函数可以获取您想要的内容

/**
 * Returns the content of the message.
 *
 * @return string The message content
 */
public function getContent();

因此,如果您将MessageInterface视为一个对象,而不是尝试像字符串一样访问它(它为您提供默认值__toString()),那么您将使用以下代码:

$buzz = $this->container->get('buzz');
$response = $buzz->get('http://api.ipify.org?format=json');
echo $response->getContent(); // output: {"ip":"54.254.210.209"}
于 2014-11-13T15:39:47.697 回答