http

    disable browser cache in rack

    15 Sep 2009

    bullet插件在浏览器cache下总是会问题,因为页面被cache了,总是返回304 Not Modified,bulletware下的代码没有执行就直接跳过了。

    之前就是在README下面写了一段,让用户把web browser cache disable掉,不过始终不是一个解决方法,今天就直接在rack下把browser cache disable掉了

    class Bulletware
      def initialize(app)
        @app = app
      end
    
      def call(env)
        return @app.call(env) unless Bullet.enable?
        ......
        no_browser_cache(headers) if Bullet.disable_browser_cache
        [status, headers, response_body]
      end
    
      def no_browser_cache(headers)
        headers["Cache-Control"] = "no-cache, no-store, max-age=0, must-r...
    Read More

    Tags 


    在google app engine上做代理服务(for crawler)

    12 Sep 2009

    本来是想在GAE上做一个完整的代理服务器的,结果发现不可行,好像当HTTP的URL和HOST不匹配的时候,GAE就会把你拦截。怪不得GAE上找到的代理服务器都必须安装客户端或者是网页式的呢。

    但是我在hostmonster上的crawler还被挡在国门之外,没办法,只能通过QUERY_STRING来实现一个比较奇怪的代理了:

    package com.huangzhimin.gae.proxy;
    
    import java.io.IOException;
    import java.io.InputStream;
    import java.net.HttpURLConnection;
    import java.net.URL;
    import java.util.Enumeration;
    
    import javax.servlet.http.*;
    
    @SuppressWarnings("serial")
    public class RichardProxyServlet extends HttpServlet {
        public void doGet(HttpServletRequest req...
    Read More

    Tags 


    get_response_with_headers

    30 Aug 2009

    最近在用ruby的net/http写爬虫,发现net/http提供的接口还真不是一般不好用

    一开始我是用Net::HTTP.get_response方法,挺简单的,测试起来也不难

    http = mock(Net::HTTPSuccess)
    http.stubs(:is_a?).with(Net::HTTPSuccess).returns(true)
    http.stubs(:body).returns(content)
    Net::HTTP.expects(:get_response).with(URI.parse(remote_path)).returns(http)

    接着碰到有些网站必须指定User-Agent才能访问,发现get_response方法不能修改http headers,只能换Net::HTTP.start方法

    response = start(uri.host, uri.port) do |http|
      http.get(uri.request_uri, headers)
    end

    可是写测试的时候傻眼了,因为要根据不同的uri.request_u...

    Read More

    Tags 


    contact-list类库依赖包之commons-httpclient

    23 Aug 2009

    commons-httpclient是apache下的一个开源项目,提供了一个纯java实现的http客户端,使用它可以很方便发送HTTP请求,接受HTTP应答,自动管理Cookie等等。

    对于contact-list类库来说,需要使用的功能有,自动管理Cookie,设置HTTP头,发送HTTP请求,接受HTTP应答,转发HTTP重定向,还有输出HTTP请求/应答日志,下面对这些功能的实现进行解释:

    1. 自动管理Cookie
    public EmailImporter(String email, String password, String encoding) {
        ......
        client = new HttpClient();
        client.getParams().setCookiePolicy(CookiePolicy.BROWSER_COMPATIBILITY);
        client.getParams().setParameter("http.protocol.single-cookie-header", true);
    }

    其中将HttpClient的Cookie策略设置为CookiePolicy.BROWSER_COMPATIBILITY,即表示java client将按照浏览器的方式来自动处理Cookie。当然你也可以在运行过程中手动调整cooki...

    Read More

    Tags