2010-04-15 68 views
8

我一直使用卷曲的这种东西,但this article让我想我可以要求另一页容易使用Request对象中的Kohana 3如何在Kohana 3中执行外部请求?

$url = 'http://www.example.com'; 

    $update = Request::factory($url); 

    $update->method = 'POST'; 

    $update->post = array(
     'key' => 'value' 
    ); 

    $update->execute(); 
    echo $update->response; 

但是我得到的错误

Accessing static property Request::$method as non static 

从这我可以认为这意味着该方法的方法是静态的,但这并没有多大帮助。我也复制并粘贴了该文章中的示例,并抛出了相同的错误。

基本上,我试图POST到外部服务器上的新页面,并执行Kohana方式。所以,我是否正确地做了这个,或者我应该只使用cURL(或带有上下文的file_get_contents())?

回答

10

我不知道这最初写的OP使用的Kohana 3.0时,但主要版本Kohana 3.1使这项工作变得更容易。 Remote :: get()是已弃用(并不是很好开始)。在Kohana的3.1完成,这是一个简单的事情,和你差不多了吧:

$url = 'http://www.example.com'; 

$request = Request::factory($url) 
    ->method('POST') 
    ->post('key', 'value'); 

$response = $request->execute(); 

echo $response->body(); 

我有些感动的东西周围走链接语法简洁的优势。通过回复,您也可以检查回复代码。欲了解更多信息,请阅读3.1 API文档RequestRequest_Client_External(负责处理这些外部即不中,应用程序的请求。

+0

谢谢Jason :) – alex 2011-05-25 02:00:20

+0

根据Kohana文档http://kohanaframework.org/3.1/guide/api/Request#execute,$ request-> execute()返回一个Request对象。不需要调用$ request-> execute() - > response(); – 2011-06-06 22:56:38

+0

实际上,你不得不调用'response()'函数 - 否则你仍然在处理Request对象。 Request类和Response类都有一个你可以阅读的主体。 Request的'body()'就是 - _request_主体。大多数情况下,这意味着任何形式的数据,等等。不是你想要的行为,并且肯定会很奇怪,以便准确找回你发送的内容! – diurnalist 2011-06-15 00:04:35

4

刚才看了这个在这个例子中 使用底部

的请求类是目前作为 Kohana的核心研发部门的一部分内 我个人的github帐户,它可以 从 获得http://github.com/samsoir/core。如果 使用官方Kohana PHP 3.0 下载,则需要定制 请求类的扩展名。

另请参阅this discussion

-2

请求对象用于在您的应用程序内请求页面。您不能将其用于外部网址。哦,你不必使用卷曲,你可以这样做更容易:

$page = file_get_contents('http://google.com'); 
+0

我要创建的'POST'我想,虽然发送流上下文。 – alex 2010-04-27 06:11:41

+0

我下对于通过file_get_contents允许外部URL的印象是一种安全风险和不好的做法 – 2010-06-03 16:57:39

+0

@mike:那时你的印象是错误的,假设你有一个硬编码的URL(就像我的例子中那样),这绝对没有任何不安全的地方 – ryeguy 2010-06-03 17:50:10