直接看下面的注释中针对每一个文件的作用说明。

<?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 原理的更多相关文章

  1. reactnative 原生组件通信原理

    http://www.csdn.net/article/2015-11-27/2826345-compare-React-Native-with-ExMobi 原生组件通信原理 React Nativ ...

  2. atitit.  web组件化原理与设计

    atitit.  web组件化原理与设计 1. Web Components提供了一种组件化的推荐方式,具体来说,就是:1 2. 组件化的本质目的并不一定是要为了可复用,而是提升可维护性. 不具有复用 ...

  3. Openstack组件实现原理 — Nova 体系结构

    目录 目录 前文列表 Nova体系结构 虚拟机实例化流程 前文列表 Openstack组件部署 - Overview和前期环境准备 Openstack组建部署 - Environment of Con ...

  4. Openstack组件实现原理 — OpenVswitch/Gre/vlan

    目录 目录 前文提要 Neutron 管理的网络相关实体 OpenVswitchOVS OVS 的架构 VLan GRE 隧道 Compute Node 中的 Instance 通过 GRE 访问 P ...

  5. 分享动态拼接Expression表达式组件及原理

    前言 LINQ大家都知道,用起来也还不错,但有一个问题,当你用Linq进行搜索的时候,你是这样写的 var query = from user in db.Set<User>()      ...

  6. .Net调用Office Com组件的原理及问题检索com类工厂组件检索 COM 类工厂中 CLSID 为 {XXX} 的组件失败

    我是在本地32位操作系统+vs2010+office2007做创建并下载Excel,ppt文件的操作没有问题,发布到64位系统的服务器上报错,最开始报错:: 1:Retrieving the COM ...

  7. Omi框架学习之旅 - 组件 及原理说明

    hello world demo看完后其实基本的写法就会了. 但是omi中的组件是神马鬼?其实我也不知道组件是啥. 百度百科是这么说的: 是对数据和方法的简单封装.es6中,一个类其实也可以做到对方法 ...

  8. Salesforce学习之路(十)Aura组件工作原理

    很喜欢曾经看到的一句话:以输出倒逼输入.以输出的形式强制自己学习,确实是高效的学习方式,真的很棒.以下仅为个人学习理解,如有错误,欢迎指出,共同学习. 1. 什么是Lightning Componen ...

  9. Spring Cloud之负载均衡组件Ribbon原理分析

    目录 前言 一个问题引发的思考 Ribbon的简单使用 Ribbon 原理分析 @LoadBalanced 注解 @Qualifier注解 LoadBalancerAutoConfiguration ...

随机推荐

  1. Keepalived实战(3)

    一.环境 如上图所示: keepalived的mater为proxy-master,keepalived的slave为proxy-slave. 要求:当mater出现问题时,主动切换到slave上.这 ...

  2. 爬取网页内容java

    下面介绍的这个方法只是作为抛砖引玉:根据网页URL就可以抓取其中的内容 /** * @title getHtmlResourceByUrl * @param url 网址 * @param encod ...

  3. 【C#系列】浅谈委托和委托

    本篇文章更适合具有一定开发经验,一定功底,且对底层代码有所研究的朋友!!! 本篇文章主要采用理论和代码实例相结合方法来论述委托和事件,涉及到一些边界技术,如软件架构的OCP原则(开-闭原则), 软件架 ...

  4. CSS颜色渐变

    一. Webkit浏览器 (1) 第一种写法: background:-webkit-gradient(linear ,10% 10%,100% 100%, color-stop(0.14,rgb(2 ...

  5. Vijos P1131 最小公倍数和最大公约数问题【暴力】

    最小公倍数和最大公约数问题 描述 输入二个正整数x0,y0(2≤x0≤100000,2≤y0≤1000000),求出满足下列条件的P.Q的个数. 条件:1.P.Q是正整数 2.要求P.Q以xO为最大公 ...

  6. 学习Spring必学的Java基础知识(1)----反射

    引述要学习Spring框架的技术内幕,必须事先掌握一些基本的Java知识,正所谓"登高必自卑,涉远必自迩".以下几项Java知识和Spring框架息息相关,不可不学(我将通过一个系 ...

  7. c++(排序二叉树删除)

    相比较节点的添加,平衡二叉树的删除要复杂一些.因为在删除的过程中,你要考虑到不同的情况,针对每一种不同的情况,你要有针对性的反应和调整.所以在代码编写的过程中,我们可以一边写代码,一边写测试用例.编写 ...

  8. 网络爬虫技术Jsoup——爬到一切你想要的(转)

    转自:http://blog.csdn.net/ccg_201216323/article/details/53576654 本文由我的微信公众号(bruce常)原创首发, 并同步发表到csdn博客, ...

  9. TCP 和 UDP

    TCP协议与UDP协议的区别    首先咱们弄清楚,TCP协议和UCP协议与TCP/IP协议的联系,很多人犯糊涂了,一直都是说TCP/IP协议与UDP协议的区别,我觉得这是没有从本质上弄清楚网络通信! ...

  10. JAVA之JDBC的简单使用(Mysql)

    JDBC增删查改 昨天七七八八的关于Mysql的配置 和 基本使用也算是初步解决了,今天 抽空看了JAVA的JDBC(JAVA DATA BASE CONNECTION)我也不知道我全称拼写对对不对