BrowserKit组件

编辑本页

警告:您正在浏览的文档欧宝体育电话欧宝娱乐app下载地址Symfony 4.3,现已不再维护。

本页的更新版本用于Sy欧宝娱乐app下载地址mfony 6.2(当前稳定版本)。

BrowserKit组件

BrowserKit组件模拟web浏览器的行为,允许您以编程方式发出请求、单击链接和提交表单。

请注意

在4.欧宝娱乐app下载地址3之前的Symfony版本中,BrowserKit组件只能向应用程序发出内部请求。从Symfony 4.3开始欧宝娱乐app下载地址,这个组件也可以向任何公共站点发送HTTP请求当它与HttpClient组件

安装

1
Composer需要symfony欧宝娱乐app下载地址/browser-kit

请注意

如果在Symfony应用程序外部安装此组件,则必须要求欧宝娱乐app下载地址供应商/ autoload.php文件,以启用Composer提供的类自动加载机制。读这篇文章欲知详情。

基本用法

另请参阅

本文解释了如何在任何PHP应用程序中将BrowserKit特性作为独立组件使用。读了欧宝娱乐app下载地址Symfony功能测试文章,以了解如何在Symfony应用程序中使用它。欧宝娱乐app下载地址

创建客户端

该组件只提供了一个抽象客户端,而没有提供任何可用于HTTP层的后端。

要创建自己的客户机,必须扩展摘要客户端类,并实现doRequest ()方法。这个方法接受一个请求并返回一个响应:

12 3 4 5 6 7 8 9 10 11 12 13 14
名称空间Acme使用欧宝娱乐app下载地址组件BrowserKit客户端作为BaseClient使用欧宝娱乐app下载地址组件BrowserKit响应客户端扩展BaseClient受保护的函数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 (“得到”' / ');

客户端对象能够模拟链接单击。传递链接的文本内容,客户端将执行所需的HTTP GET请求来模拟链接点击:

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

如果你需要链接对象,该对象提供对链接属性的访问(例如。链接- > getMethod ()链接- > getUri ()),使用另一种方法:

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

提交表单

客户端对象还能够提交表单。首先,使用任何按钮选择表单,然后在提交之前覆盖它的任何属性(方法,字段值等):

12 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”);//找到带有'Log in'按钮的表单并提交// 'Log in'可以是一个

如果你需要形式对象,该对象提供对表单属性的访问(例如。形式- > getUri ()形式- > getvalue ()形式- > getFields ()),使用另一种方法:

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

饼干

检索饼干

客户端实现通过控件公开cookie(如果有)CookieJar,让你可以在向客户端发出请求时储存和检索任何cookie:

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

请注意

这些方法只返回未过期的cookie。

循环浏览cookie

12 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 ();//获取包含所有cookie的数组饼干cookieJar->所有();foreach饼干作为饼干) {/ /……//获取所有值cookieJar->allValues (“http://欧宝娱乐app下载地址www.oldmanjams.com”);foreach作为价值) {/ /……//获取所有原始值rawValuescookieJar->allRawValues (“http://欧宝娱乐app下载地址www.oldmanjams.com”);foreachrawValues作为rawValue) {/ /……

设置cookie

你也可以创建cookie,并将它们添加到一个cookie罐子中,然后注入到客户端构造函数中:

1 2 3 4 5 6 7 8 9 10
使用Acme客户端//创建cookie并添加到cookie jar饼干饼干(“味道”“巧克力”strtotime (“+ 1天”));cookieJarCookieJar ();cookieJar->集(饼干);//创建客户端并设置cookie客户端客户端([],cookieJar);/ /……

历史

客户端存储了你所有的请求,允许你在历史记录中来回切换:

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

方法删除客户端的历史记录重启()方法。这也将删除所有的cookie:

1 2 3 4 5 6 7
使用Acme客户端客户端客户端();客户端->请求(“得到”' / ');//重置客户端(历史记录和cookie也被清除)客户端->重启();

外部HTTP请求

到目前为止,本文中的所有示例都假设您正在向自己的应用程序发出内部请求。但是,当向外部网站和应用程序发出HTTP请求时,可以运行完全相同的示例。

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

1 2 3 4
使用欧宝娱乐app下载地址组件BrowserKitHttpBrowser使用欧宝娱乐app下载地址组件HttpClientHttpClient浏览器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 ());

4.3

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

此工作,包括代码示例,是根据创作共用BY-SA 3.0许可证。