2010-04-15 1 views
8

Я всегда использовал Curl для такого рода вещи, но 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 сделал это значительно легче. Удаленный :: 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 документацию для Request и Request_Client_External (который обрабатывает эти внешние т.е. не внутри приложения запросов.

+0

Спасибо Jason :) – alex

+0

Согласно документам Kohana http://kohanaframework.org/3.1/guide/api/Request#execute, запрос $ request-> execute() возвращает объект Request. Нет необходимости вызывать $ request-> execute() -> response(); –

+0

На самом деле вам нужно вызвать функцию 'response()', иначе вы все еще имеете дело с объектом Request. И класс Request, и класс Response имеют тело, которое вы можете прочитать. 'Body()' запроса в точности соответствует телу _request_. В основном это означает любые данные формы, которые вошли и т. Д. Не то поведение, которое вы хотели бы, и, безусловно, было бы странно возвращаться именно к тому, что вы отправили! – diurnalist

4

Просто прочитайте это в нижнем классе

Просьбы, используемом в этом примере в настоящее время доступна как часть ветви разработки Kohana ядра в моего личного GitHub счет, который может быть получен из http://github.com/samsoir/core. Если используя официальный сайт Kohana PHP 3.0 , необходимо выполнить произвольное расширение класса запроса .

См. Также this discussion.

-2

Объект «Запрос» используется для запроса страниц в вашей заявке. Вы не можете использовать его для внешних URL-адресов. О, и вы не должны использовать локон, вы можете сделать это легче сделать это:

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

Я должен создать контекст потока для 'Post' Я хочу, чтобы отправить хотя. – alex

+0

Я под впечатление, что разрешение внешних URL-адресов с помощью file_get_contents является угрозой безопасности и плохой практикой. –

+0

@mike: у вас неправильное впечатление. Предположим, что у вас есть жесткий код (например, в моем примере), нет абсолютно ничего небезопасного. – ryeguy

 Смежные вопросы

  • Нет связанных вопросов^_^