[SF] Symfony 组件 BrowserKit 原理
直接看下面的注释中针对每一个文件的作用说明。
<?php
/**
* BrowserKit - Make internal requests to your application.
*
* If you need to make requests to external sites and applications, consider using Goutte.
*
* Request.php 是一个简单包装请求中的各部分信息的容器,以提供存取。
* Response.php 是一个简单包装 content, status, headers 的对象,仅仅用于返回,return new Response()。
* Cookie.php 是一个 cookie 信息的容器,操作逻辑和原生cookie函数基本一致,可以理解为只在程序中传递的 cookie,不是在浏览器中真实设置的 cookie。
* CookieJar.php 是所有不重复未过期 Cookie对象 的容器,内部设置原理是 $this->cookieJar[$cookie->getDomain()][$cookie->getPath()][$cookie->getName()] = $cookie;
* History.php 是记录每个 Request对象 的容器,以提供存取,内部设置原理是 $this->stack[] = clone $request; $this->position = count($this->stack) - 1;
* Client.php 一个模拟浏览器的客户端,内部组合应用 Request, Cookie, CookieJar, History 以及 DomCrawler, Process 组件,Process 实际请求脚本,DomCrawler 实际处理 HTML 文档。
*
* 以上容器的概念等同于对象,提供OOP的操作。
*
* @see https://symfony.com/doc/current/components/browser_kit.html
* @author <www.farwish.com>
*/ use Symfony\Component\BrowserKit\Client as BaseClient;
use Symfony\Component\BrowserKit\Response; include __DIR__ . '/../../../vendor/autoload.php'; // Creating a Client.
class Client extends BaseClient
{
protected function doRequest($request)
{
return new Response();
}
} // Making Requests.
$client = new Client();
$crawler = $client->request('GET', '/'); print_r($crawler);
小结:
个人感觉 BrowserKit 是一个比较鸡肋的组件,主要用在 application 内部请求以及HTML解析,而且它的功能都是来源于其它两个组件 Process 和 DomCrawler。
如果要模拟请求外部站点,可使用 Goutte 组件,它的功能来源于其它两个大组件 Guzzle 和 DomCrawler,所以文档用法并不详细,原理同 BrowserKit 是一层再包装。
Code:https://github.com/farwish/php-lab/blob/master/lab/symfony/BrowserKit/client.php
Link:http://www.cnblogs.com/farwish/p/8418801.html
[SF] Symfony 组件 BrowserKit 原理的更多相关文章
- reactnative 原生组件通信原理
http://www.csdn.net/article/2015-11-27/2826345-compare-React-Native-with-ExMobi 原生组件通信原理 React Nativ ...
- atitit. web组件化原理与设计
atitit. web组件化原理与设计 1. Web Components提供了一种组件化的推荐方式,具体来说,就是:1 2. 组件化的本质目的并不一定是要为了可复用,而是提升可维护性. 不具有复用 ...
- Openstack组件实现原理 — Nova 体系结构
目录 目录 前文列表 Nova体系结构 虚拟机实例化流程 前文列表 Openstack组件部署 - Overview和前期环境准备 Openstack组建部署 - Environment of Con ...
- Openstack组件实现原理 — OpenVswitch/Gre/vlan
目录 目录 前文提要 Neutron 管理的网络相关实体 OpenVswitchOVS OVS 的架构 VLan GRE 隧道 Compute Node 中的 Instance 通过 GRE 访问 P ...
- 分享动态拼接Expression表达式组件及原理
前言 LINQ大家都知道,用起来也还不错,但有一个问题,当你用Linq进行搜索的时候,你是这样写的 var query = from user in db.Set<User>() ...
- .Net调用Office Com组件的原理及问题检索com类工厂组件检索 COM 类工厂中 CLSID 为 {XXX} 的组件失败
我是在本地32位操作系统+vs2010+office2007做创建并下载Excel,ppt文件的操作没有问题,发布到64位系统的服务器上报错,最开始报错:: 1:Retrieving the COM ...
- Omi框架学习之旅 - 组件 及原理说明
hello world demo看完后其实基本的写法就会了. 但是omi中的组件是神马鬼?其实我也不知道组件是啥. 百度百科是这么说的: 是对数据和方法的简单封装.es6中,一个类其实也可以做到对方法 ...
- Salesforce学习之路(十)Aura组件工作原理
很喜欢曾经看到的一句话:以输出倒逼输入.以输出的形式强制自己学习,确实是高效的学习方式,真的很棒.以下仅为个人学习理解,如有错误,欢迎指出,共同学习. 1. 什么是Lightning Componen ...
- Spring Cloud之负载均衡组件Ribbon原理分析
目录 前言 一个问题引发的思考 Ribbon的简单使用 Ribbon 原理分析 @LoadBalanced 注解 @Qualifier注解 LoadBalancerAutoConfiguration ...
随机推荐
- 初次了解struts的action类
Action类真正实现应用程序的事务逻辑,它们负责处理请求.在收到请求后,ActionServlet会为这个请求选择适当的Action 如果需要,创建Action的一个实例 调用Action的perf ...
- UVAlive 3708 Graveyard(最优化问题)
题目描述: 在周长10000的圆上,初始等距的放置着n个雕塑,现在新加入m个雕塑,要使得这n+m个雕塑仍然等距,问原来n个雕塑要移动的距离总和的最小值. 原题地址: http://acm.hust.e ...
- bzoj:1656 [Usaco2006 Jan] The Grove 树木
Description The pasture contains a small, contiguous grove of trees that has no 'holes' in the middl ...
- COGS 1299. bplusa【听说比a+b还要水的大水题???】
1299. bplusa ☆ 输入文件:bplusa.in 输出文件:bplusa.out 评测插件 时间限制:1 s 内存限制:128 MB [题目描述] 输入一个整数n,将其拆为两 ...
- Zabbix如何实现批量监控端口状态
引言 ------------------------------------------------------------------------------------------------- ...
- 来说说datatype
今天敲代码一直卡在一个问题上面好久那就是--datatype的未定义,起初不晓得datatype的含义,遇到这种情况首先想到的就是自己又忘记加上面头文件了.随即写了个stdlib.h上去.可是问题并没 ...
- ECharts 环形饼图 动态获取json数据
ECharts 环形饼图 动态获取json数据 效果图如下: 一.html部分 <div id="secondPieChart" style="width:100 ...
- 配置国内PIP源方法
python开发者都知道,当我们pip install安装扩展库的时候,经常遇到安装失败(超时)等,有时候是因为国外镜像被屏蔽了,带来不少麻烦, 随着国内python开发的增多,越来越多企业都开放了自 ...
- 一篇文章让你深透理解cookie和session,附带分布式WEB系统redis共享session方案
cookie和session有什么区别?这是一个很基础的知识点,大家可能都知道一个大概:cookie是存在客户端的,session是存储在服务端,cookie和session用来验证识别用户的登录状态 ...
- linux 下 用phpmailer类smtp发送邮件始终不成功,提示:ERROR: Failed to co
https://zhidao.baidu.com/question/509191264.html?fr=iks&word=PHPMailerSMTP+connect()+failed& ...