>>> YieldNull
  • /blog
  • /archives
  • /github
  • /about

Blog Entries all / by tag / by year

  • 解析HTTP请求体时遇到SocketTimeoutException

    2016-08-05 03:59:11 / HTTP /5045 hits

    之前写Http Server 的时候,遇到这样一种情况:

    当客户端POST一段JSON数据到服务器时,服务器要读取出所有的Http Request Body的内容。于是便直接用BufferedReader读取,直到EOF。但总是会出现SocketTimeoutException。很明显,是由于客户端发完数据之后,并没有关闭输出流,而是等待服务器段发送Connection:[keep-alive|closed]字段来判断是否复用连接。所以在服务器端等待EOF时,客户端也在等待服务器的Response,由此而引发超时。

    Read more...


  • Supervisor+Gunicorn+Flask 上传文件的编码问题

    2016-03-27 03:14:44 / Python Ubuntu /9212 hits

    使用Flask+Gunicorn+Supervisor+Nginx把应用部署到服务器时,出现了编码问题。

    File "/srv/www/biu/venv/lib/python3.4/site-packages/werkzeug/datastructures.py", 
    
    line 2653, in save
        dst = open(dst, 'wb')
    
    UnicodeEncodeError: 'ascii' codec can't encode characters
    
     in position 56-60: ordinal not in range(128)
    

    文件名的确有中文,但是在本地测试的时候没有问题啊!在本地采用的是'UTF-8'进行编码,但是在服务器怎么就是'ASCII'了?

    Read more...


  • Git Push-to-Deploy Configuration

    2015-12-17 17:27:47 / Git Linux /5324 hits

    本文介绍通过搭建git服务器实现提交代码到master分支时完成网站应用代码的部署。

    创建SSH-Public-Key

    本地计算机需要创建SSH公钥与服务器通信。使用ssh-keygen生产公钥以及私钥。

    $ ssh-keygen
    Generating public/private rsa key pair.
    Enter file in which to save the key (/home/finalize/.ssh/id_rsa): demo 
    Enter passphrase (empty for no passphrase): 
    Enter same passphrase again: 
    Your identification has been saved in demo.
    Your public key has been saved in demo.pub.
    The key fingerprint is:
    6d:07:2c:56:48:aa:0d:08:ad:c1:db:ce:0f:bf:4e:6b finalize@junjie
    The key's randomart image is:
    +--[ RSA 2048]----+
    |o.     ....      |
    |.o..   ..o       |
    | o+ . . o o      |
    |.. . + . o .     |
    |  o . . S o .    |
    |   +     . .     |
    |    +.           |
    |    .E.          |
    |    o+.          |
    +-----------------+
    

    然后在ssh的配置文件中加入demo.pub的配置

    $ vi ~/.ssh/config
    $ chmod 600 ~/.ssh/config
    

    Read more...


  • CMM语法分析

    2015-11-24 21:16:11 / CMM Parser /5983 hits

    语法分析其实就是按照事先定义好的语法,对词法分析器返回的Token与语法元素进行匹配,若是发现不匹配则报错。本程序采用递归下降语法分析器进行分析。

    那么该如何与预定义的语法进行匹配呢?这就要用到FIRST集合与FOLLOW集合了。其实也并没有辣么理论化,只需要根据当前读取到的Token判断应该进入哪个处理函数就行了。比如读到while就知道要进入while的处理函数;读到if就知道要处理if了。

    进入处理函数之后,我们定义一个expect(Token)函数来期待接下来的Token。传入期待的Token,要是与接下来读取到的Token匹配,就继续往下分析,要是不匹配,就抛出异常,停止分析。

    Read more...


  • 备份QQ空间说说

    2015-11-17 23:24:50 / Python /5495 hits

    先将Cookie及用户写入config.json中,格式如下

    {
        "shuoshuo":"<shuoshuo_cookie>",
        "friends":"<friends_cookie>",
        "user":"<your_qq_number>",
        "host_user":"<the_owner_qq>"
    }
    

    然后

    python shuoshuo.py config.json
    

    示例

    Read more...


  • About this site

    2015-11-13 16:38:27 / Blog /13115 hits

    Email

    [email protected]

    Github

    https://github.com/YieldNull/

    Gists

    https://gist.github.com/YieldNull

    Read more...


  • « Previous 8 / 12
  • Next 10 / 12 »

About this site © YieldNull,