BrowserKit组件

编辑该页面

警告:你浏览的文档欧宝体育电话欧宝娱乐app下载地址Symfony 4.4,不再维护。

这个页面的更新版本Symf欧宝娱乐app下载地址ony 6.2(当前的稳定版本)。

BrowserKit组件

BrowserKit组件模拟web浏览器的行为,让你发出请求,通过编程方式点击链接并提交表单。

请注意

在Sy欧宝娱乐app下载地址mfony的版本4.3之前,BrowserKit组件只能让您的应用程序内部请求。从4.3 Symfony开始欧宝娱乐app下载地址,该组件还可以让任何公共网站的HTTP请求当结合使用它HttpClient组件

安装

1
美元作曲家需要symfony / br欧宝娱乐app下载地址owser-kit

请注意

如果你安装这个组件之外的Symfony应用程序,你必须要求欧宝娱乐app下载地址供应商/ autoload.php文件在你的代码,使作曲家提供的类加载机制。读这篇文章为更多的细节。

基本用法

另请参阅

这篇文章解释了如何使用BrowserKit功能作为一个独立的组件在任何PHP应用程序。读了欧宝娱乐app下载地址Symfony功能测试文章在Symfony应用程序了解如何使用它。欧宝娱乐app下载地址

创建一个客户端

组件只提供一个抽象的客户,不提供任何后端可以使用HTTP层。创建自己的客户,你必须扩展AbstractBrowser类和实现doRequest ()方法。

4.3

在Sy欧宝娱乐app下载地址mfony 4.3和更早的版本中,AbstractBrowser类被称为客户端(现在已经弃用)。

doRequest ()方法接受一个请求,应该返回一个响应:

1 2 3 4 5 6 7 8 9 10 11 12 13 14
名称空间Acme;使用欧宝娱乐app下载地址\组件\BrowserKit\AbstractBrowser;使用欧宝娱乐app下载地址\组件\BrowserKit\响应;客户端扩展AbstractBrowser{受保护的函数doRequest(美元请求){/ /……将请求转换成响应返回响应(美元内容,美元状态,美元);}}

简单实现的基于HTTP的浏览器层,看一看HttpBrowser所提供的这个组件。为实现基于HttpKernelInterface,看一看客户端提供的HttpKernel组件

发出请求

使用请求()方法将HTTP请求。前两个参数的HTTP方法和请求的URL:

1 2 3 4
使用Acme\客户端;美元客户端=客户端();美元履带=美元客户端- >请求(“得到”,' / ');

返回的值请求()方法的一个实例履带类提供的DomCrawler组件,它允许通过编程方式访问和遍历HTML元素。

xmlHttpRequest ()方法,该方法定义了相同的观点请求()方法,是一个捷径使AJAX请求:

1 2 3 4 5
使用Acme\客户端;美元客户端=客户端();/ /需要HTTP_X_REQUESTED_WITH头自动添加美元履带=美元客户端- >xmlHttpRequest (“得到”,' / ');

AbstractBrowser能够模拟点击链接。通过链接的文本内容和客户端将执行所需的HTTP GET请求来模拟点击的链接:

1 2 3 4 5 6
使用Acme\客户端;美元客户端=客户端();美元客户端- >请求(“得到”,' /产品/ 123);美元履带=美元客户端- >clickLink (“去别处……”);

如果你需要的链接提供访问的对象(如链接属性。$链接- > getMethod (),$链接- > getUri ()),使用其他方法:

1 2 3 4
/ /……美元履带=美元客户端- >请求(“得到”,' /产品/ 123);美元链接=美元履带- >selectLink (“去别处……”)- >链接();美元客户端- >点击(美元链接);

提交表单

AbstractBrowser也可以提交表单。首先,选择使用任何形式的按钮,然后覆盖任何的属性(方法、字段值等)前提交:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21日22日23日24日25日26日
使用Acme\客户端;美元客户端=客户端();美元履带=美元客户端- >请求(“得到”,“https://github.com/login”);/ /找到“登录”按钮的表单并提交它/ /“登录”可以是文本内容,id、价值或名称<按钮>或< input type = "提交" >美元客户端- >submitForm (“登录”);/ /第二个可选参数允许您覆盖默认表单字段值美元客户端- >submitForm (“登录”,(“登录”= >“my_user”,“密码”= >“my_pass”,/ /上传一个文件,必须绝对的文件路径“文件”= >__FILE__]);/ /你也可以覆盖其他形式的选择美元客户端- >submitForm (“登录”,(“登录”= >“my_user”,“密码”= >“my_pass”),/ /覆盖默认的HTTP方法“把”,/ /覆盖一些$ _SERVER参数(例如HTTP头)(“HTTP_ACCEPT_LANGUAGE”= >“西文”]);

如果你需要的形式对象,它提供了访问表单属性(如。$形式- > getUri (),$形式- > getvalue (),$形式- > getFields ()),使用其他方法:

1 2 3 4 5 6 7 8 9
/ /……/ /选择表单,填写一些值美元形式=美元履带- >selectButton (“登录”)- >形式();美元形式(“登录”]=“欧宝娱乐app下载地址symfonyfan”;美元形式(“密码”]=“anypass”;/ /提交表单美元履带=美元客户端- >提交(美元形式);

饼干

检索饼干

AbstractBrowser实现了通过一个饼干(如果有的话)CookieJar,它允许您存储和检索任何饼干与客户端发出请求时:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21日22日23日
使用Acme\客户端;/ /请求美元客户端=客户端();美元履带=美元客户端- >请求(“得到”,' / ');/ /得到饼干罐美元cookieJar=美元客户端- >getCookieJar ();/ /得到一个饼干的名字美元饼干=美元cookieJar- >get (“name_of_the_cookie”);/ /得到cookie数据美元的名字=美元饼干- >getName ();美元价值=美元饼干- >getValue ();美元rawValue=美元饼干- >getRawValue ();美元isSecure=美元饼干- >isSecure ();美元isHttpOnly=美元饼干- >isHttpOnly ();美元isExpired=美元饼干- >isExpired ();美元到期=美元饼干- >getExpiresTime ();美元路径=美元饼干- >getPath ();美元=美元饼干- >getDomain ();美元sameSite=美元饼干- >getSameSite ();

请注意

这些方法只返回饼干没有过期。

遍历饼干

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21日22日23日24日25日26日
使用Acme\客户端;/ /请求美元客户端=客户端();美元履带=美元客户端- >请求(“得到”,' / ');/ /得到饼干罐美元cookieJar=美元客户端- >getCookieJar ();/ /获取数组与所有饼干美元饼干=美元cookieJar- >所有();foreach(美元饼干作为美元饼干){/ /……}/ /得到所有值美元=美元cookieJar- >allValues (“http://欧宝娱乐app下载地址www.oldmanjams.com”);foreach(美元作为美元价值){/ /……}/ /得到所有原始值美元rawValues=美元cookieJar- >allRawValues (“http://欧宝娱乐app下载地址www.oldmanjams.com”);foreach(美元rawValues作为美元rawValue){/ /……}

设置cookie

您还可以创建cookie,并将它们添加到饼干罐,可以注入到客户机的构造函数:

1 2 3 4 5 6 7 8 9 10
使用Acme\客户端;/ /创建饼干和饼干罐美元饼干=饼干(“味道”,“巧克力”strtotime (“+ 1天”));美元cookieJar=CookieJar ();美元cookieJar- >集(美元饼干);/ /创建一个客户端,设置cookie美元客户端=客户端([],,美元cookieJar);/ /……

历史

客户端存储你所有的请求让你回去的历史:

1 2 3 4 5 6 7 8 9 10 11 12 13 14
使用Acme\客户端;美元客户端=客户端();美元客户端- >请求(“得到”,' / ');/ /选择并点击一个链接美元链接=美元履带- >selectLink (“欧宝体育电话文档”)- >链接();美元客户端- >点击(美元链接);/ /返回主页美元履带=美元客户端- >回();/ /进入文档页面欧宝体育电话美元履带=美元客户端- >转发();

您可以删除客户的历史的重启()方法。这也将删除所有的饼干:

1 2 3 4 5 6 7
使用Acme\客户端;美元客户端=客户端();美元客户端- >请求(“得到”,' / ');/ /重置客户机(历史和饼干被清除)美元客户端- >重启();

使外部HTTP请求

到目前为止,本文中的示例都假定你正在内部请求到您自己的应用程序。然而,您可以运行相同的例子当使HTTP请求外部web站点和应用程序。

首先,安装和配置HttpClient组件。然后,使用HttpBrowser创建客户端,将外部HTTP请求:

1 2 3 4
使用欧宝娱乐app下载地址\组件\BrowserKit\HttpBrowser;使用欧宝娱乐app下载地址\组件\HttpClient\HttpClient;美元浏览器=HttpBrowser (HttpClient::create ());

现在,您可以使用本文中所展示的方法来提取信息,点击链接,提交表单,等。这意味着您不再需要使用专用的网络爬虫或刮板等Goutte:

1 2 3 4 5 6 7 8
美元浏览器=HttpBrowser (HttpClient::create ());美元浏览器- >请求(“得到”,“https://github.com”);美元浏览器- >clickLink (“登录”);美元浏览器- >submitForm (“登录”,(“登录”= >“……”,“密码”= >“……”]);美元openPullRequests=修剪(美元浏览器- >clickLink (“请求”)- >过滤器(”。table-list-header-toggle答:nth-child (1)”)- >text ());

提示

您还可以使用HTTP客户机选项密码,auth_basic查询。他们必须作为默认选项参数传递给浏览器所使用的HTTP客户端。

4.3

特性使外部HTTP请求是在Symfony 4.3中引入的。欧宝娱乐app下载地址

处理HTTP响应

当使用BrowserKit组件时,您可能需要处理响应你的请求。为此,调用getResponse ()的方法HttpBrowser对象。这个方法返回最后一个响应浏览器收到:

1 2 3 4
美元浏览器=HttpBrowser (HttpClient::create ());美元浏览器- >请求(“得到”,“https://foo.com”);美元响应=美元浏览器- >getResponse ();
这项工作,包括代码示例,许可下Creative Commons冲锋队3.0许可证。