SilverStripe:如何向另一个网站发出 HTTP 请求?

Posted

技术标签:

【中文标题】SilverStripe:如何向另一个网站发出 HTTP 请求?【英文标题】:SilverStripe: How do I make HTTP Request to another website? 【发布时间】:2015-09-18 12:48:30 【问题描述】:

我正在尝试在控制器方法中向另一个网站发出 HTTP 请求。我搜索了解决方案,但找不到任何可行的示例。

这是我的代码:

$r = new HttpRequest('http://community.bba.org/home', HttpRequest::METH_GET);
$r->addQueryData(array('SessionID' => $arrGetParams['SessionID']));
try 
    $r->send();
 catch (HttpException $ex) 

我收到以下错误:

致命错误:在第 215 行的 C:\wamp\www\abb\mysite\code\form\ALoginForm.php 中找不到类 'HttpRequest'

我怎样才能使这个 HTTP 请求工作?

我在 Windows 7 机器上的 WAMP 上使用 SilverStripe。

【问题讨论】:

一个空的 catch 块肯定是得不到帮助的。 “那没用” - 发生了什么?错误消息、日志文件、行为描述可能有助于诊断问题 添加了错误信息,我认为在“SilverStripe”中还有另一种方法可以发出http请求 【参考方案1】:

http://php.net/manual/en/http.install.php

这个 » PECL 扩展不与 PHP 捆绑在一起。

此问题与 SilverStripe 本身无关。您需要安装该模块,或使用 curl(wampserver 确实与该模块捆绑在一起)。 How to enable curl in Wamp server

有http://docs.silverstripe.org/en/3.1/developer_guides/integration/restfulservice/,但我不推荐。

【讨论】:

【参考方案2】:

向外部站点或资源发出请求的内置方法是使用RestfulService

文档在这里:http://docs.silverstripe.org/en/3.1/developer_guides/integration/restfulservice/

典型用法:

$service = new RestfulService('http://community.bba.org/home', 1200); //domain, cache duration
$service->setQueryString(array(
    'SessionID' => $arrGetParams['SessionID'],
));
$response = $service->request();
$body = $response->getBody();

如果你想使用 PHP 的 HTTPRequest,你必须安装 http 扩展 (http://php.net/manual/en/http.install.php)

【讨论】:

谢谢,现在我可以看到响应了,我有一个场景,我需要在另一个网站上传递查询字符串值,这会在该网站上创建会话,如果我有,我可以这样做在我的网页上隐藏 iframe。有没有办法通过发出http请求在php代码中实现这一点,我用你的代码尝试过,但是当我在同一个浏览器中访问该网站时它不会创建会话? 我认为您需要为此提出一个新问题。但是您将无法以这种方式在用户的浏览器中启动愤怒会话。

以上是关于SilverStripe:如何向另一个网站发出 HTTP 请求?的主要内容,如果未能解决你的问题,请参考以下文章

如何向另一个线程发出带有数组参数的信号

SilverStripe 功能测试是不是在发出 post 请求后将数据保存在会话中

Silverstripe 3:如何按标题,日期等对CMS网站树中的页面进行排序

Docker/Symfony/Reactjs/Keycloak:如何使用分离的 docker-compose 文件从一个容器向另一个容器发出 HTTP 请求?

增加 SilverStripe 网站的最大文件上传大小

HTTPS 和 HTTP CORS