Sheet 1
http-proxy-cache-server
  twisted-proxy prototype
    python细节
      raise语句 主动引发 异常
      with ... as ...
        with controlled_execution() as thing:
some code
          with open("x.txt") as f:
data = f.read()
do something with data
      pass语句:
        空语句，什么也不做
    twisted相关
      简介
      twisted vs nodejs
      异步编程
        使用Twisted时，避开使用os.system,避免阻塞
      常用twisted回调接口
        Transports
          代表一个可以收发字节的单条连接
            tcp连接
            udp连接
            管道
          为该连接，处理具体的异步I/O操作细节
          常用函数
            client
              getHost
                数据所属的服务器信息
            server
              loseConnection
                关闭连接
              write
                发送数据
        Protocols
          简介
            该对象实现协议内容
            一个Protocols的实现，对应一个具体网络协议的实现
            每一个对象，为每一个具体连接（Transport）提供协议解析
            每建立一条Transport连接，均需要一个protocols实例
          常用回调函数
            client
              makeConnection
                回调被调用时，将传入一个Transports实例，作为参数
                该transport就是protocols将要使用的连接
                流程图
              dataReceived
                收到数据后的回调方法
                该函数调用了底层函数doRead()
                回调过程
            server
              connectionMade
                连接创建后被回调
        Protocol Factories
          简介
            每个连接有自己的protocol
            创建连接的工作要交给twisted来完成
            产生Protocol Factories
          常用回调函数
            client
              buildProtocols
                返回一个新protocol实例
                为新连接创建对应协议
                流程图
        ClientFactory
          简介
            连接在数据接收完毕后，protocols会通知该对象
              激活回调方法connectionLost
                transport连接关闭时
              同时关闭连接
              回调过程
          常用成员变量
            client
              deferred
                一旦我们获取到data后，deferred会以返回data而被激活
                没有连接到服务器上时，deferred会以返回一个failure被激活
          常用回调函数
            connectionLost
              当连接关闭时，该函数被回调
              参数：reason
                说明连接是被安全关闭还是出错关闭
        ServerFactory
          简介
            存储要发送的数据
          常用回调函数
        http web开发
          HTTPChannel
          HTTPFactory
          Request
      twisted server连接图
  http proxy基本原理
    http method:
      get
      connect
  linux http工具
    wget
    curl
  download & cache
    实现方法
      twisted receveBuff & write file
      python调用shell，使用wget或curl命令
      urllib &urllib2
        urllib
          提供urlencode的方法
          可接收url
          不可接收Request对象
        urllib2
          既可接收url，又可接受Request对象
  目标分析
    了解twisted框架常用回调函数
    使用python urllib实现一个demo
    将demo整合进twisted中
    将访问的请求写入到一文件中
    每次request时，先扫描文件有木有相同request
  工厂模式
    详见有道云笔记
A CONNECT request urges your proxy to establish an HTTP tunnel to the remote end-point. Usually is it used for SSL connections, though it can be used with HTTP as well (used for the purposes of proxy-chaining and tunneling)
CONNECT www.google.com:443
The above line opens a connection from your proxy to www.google.com on port 443. After this, content that is sent by the client is forwarded by the proxy to www.google.com:443.
If a user tries to retrieve a page http://www.google.com, the proxy can send the exact same request and retrieve response for him, on his behalf.
With SSL(HTTPS), only the two remote end-points understand the requests, and the proxy cannot decipher them. Hence, all it does is open that tunnel using CONNECT, and lets the two end-points (webserver and client) talk to each other directly.