[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 ...
随机推荐
- 论python3下“多态”与“继承”中坑
1.背景: 近日切换到python3后,发现python3在多态处理上,有一些比较有意思的情况,特别记载,供大家参考... 以廖老师的python3教程中的animal 和dog的继承一节的代码做例子 ...
- PHP面向对象编程基本原则
首先祝大家节日快乐!!! 额,不知道你们剁手没,小梦是没有!整整已经错过了第九个年头! 小伙伴是不是有一种感觉,PHP入门的时候简直爱不释手,总是把 "PHP是世界上最好的语言" ...
- Jfinal-Plugin源码解读
PS:cnxieyang@163.com/xieyang@e6yun.com 本文就Jfinal-plugin的源码进行分析和解读 Plugin继承及实现关系类图如下,常用的是Iplugin的三个集成 ...
- 仿腾讯课堂固定滚动列表ReactNative组件
前言 由于业务需要做成类似腾讯课堂课程详情滚动的效果,考虑到后面有可能有新的呈现方式,RN提供的组件没有这种滚动控件,不如自己封装,其实去年已经写了一篇但是写的比较乱,周末花了点时间重写梳理下做的东西 ...
- python 使用paramiko模块上传本地文件到ssh
我们要了解几个函数: paramiko.Tranport(("目标ip,端口"))#这是上传目标的IP和端口 paramiko.SFTPClient.from_tranport() ...
- bzoj:3616: War
Description 小x所在的世界正在经历一场在k个阵营之间的战争.每个阵营有若干个炮塔,每个炮塔由攻击系统和防御系统组成.第i个炮塔可以攻击到离它欧几里德距离小于等于ri 或者曼哈顿距离小于等于 ...
- p2p项目,自己期望太高了。
在项目的进行中,主要牵扯到了一些安全方面的考虑,跟money相关的嘛,如果安全不考虑,你就惨了,一期呢,为了防止数据被篡改,主要对数据用dsa进行了签名,二期呢,考虑到das产生的字符串有可能太长,修 ...
- Java Thread wait、notify与notifyAll
Java的Object类包含了三个final方法,允许线程就资源的锁定状态进行通信.这三个方法分别是:wait(),notify(),notifyAll(),今天来了解一下这三个方法.在任何对象上调用 ...
- Spider_Man_3 の selenium
一:介绍 selenium最初是一个自动化测试工具,而爬虫中使用它主要是为了解决requests无法直接执行JavaScript代码的问题 selenium本质是通过驱动浏览器,完全模拟浏览器的操作, ...
- 十二个 ASP.NET Core 例子——配置操作
目录: 简单配置(利用configration 键值读取) 使用选项和配置对象(自定义类绑定配置文件实现读取) IOptionsSnapshot(配置文件更改时也变化) 内存数据放到配置对象中 实体框 ...