ibrowser ################# :: ibrowse有两种许可证:LGPL或BSD license % 启动app 5> ibrowse:start(). 发送一个json类型的html請求:: erl>>ibrowse:send_req("http://", [{"Accept","application/json"}], get, [], []). 注意: url地址必须以 ``http://`` 开头 用 ``{"Accept", "application/json"}`` 来表示json类型的請求,默认是 ``text/html`` 类型 实例:: ibrowse:send_req("http://", [{"Accept","application/json"}], post, ["{\"id\":\"1234567890\", \"timestamp\":\"23421321421532143\"}"], []). * 一个简单的get应用:: 6> ibrowse:send_req("http://intranet/messenger/", [], get). {ok,"200", [{"Server","Microsoft-IIS/5.0"}, {"Content-Location","http://intranet/messenger/index.html"}, {"Date","Fri, 17 Dec 2004 15:16:19 GMT"}, {"Content-Type","text/html"}, {"Accept-Ranges","bytes"}, {"Last-Modified","Fri, 17 Dec 2004 08:38:21 GMT"}, {"Etag","\"aa7c9dc313e4c41:d77\""}, {"Content-Length","953"}], "\r\n\r\n\r\nMessenger......" } * 一个代理的get应用:: 7> ibrowse:send_req("http://www.google.com/", [], get, [], [{proxy_user, "XXXXX"}, {proxy_password, "XXXXX"}, {proxy_host, "proxy"}, {proxy_port, 8080}], 1000 ). {ok,"302", [{"Date","Fri, 17 Dec 2004 15:22:56 GMT"}, {"Content-Length","217"}, {"Content-Type","text/html"}, {"Set-Cookie", "PREF=ID=f58155c797f96096; expires=Sun, 17-Jan-2038 19:14:07 GMT;"}, {"Server","GWS/2.1"}, {"Location", "http://www.google.co.uk/cxfer?c=PREF%3D:TM%3D1103296999:S%3Do8bEY2FIHwdyGenS&prev=/"}, {"Via","1.1 netapp01 (NetCache NetApp/5.5R2)"}], "302 Moved\n

302 Moved

\r\n\r\n"} * 把get請求后的結果存放到文件中:: 创建一个临时文件, 返回这个刚创建的临时文件的文件名 只有返回状态是200区间的才把請求的結果写入到这个临时文件中 下载的目录可以用应用环境变量 `download_dir` ,默认是当前工作目录 8> ibrowse:send_req("http://www.747.cn/", [], get, [], [{save_response_to_file, true}], 1000). {ok,"200", [{"Server","nginx/0.8.46"}, {"Date","Thu, 01 Mar 2012 10:10:40 GMT"}, {"Content-Type","text/html"}, {"Content-Length","3796"}, {"Last-Modified","Mon, 27 Feb 2012 11:20:36 GMT"}, {"Connection","keep-alive"}, {"Vary","Accept-Encoding"}, {"Accept-Ranges","bytes"}], {file,"/home/gordon/tmp/ibrowser_test/ibrowse_tmp_file_1330597007674127"}} * 设置连接池与管道大小,下面这个例子設定连接到服务的最大连接数到10,并把管道大小设置为1:: Connections are setup a required 11> ibrowse:set_dest("www.hotmail.com", 80, [{max_sessions, 10}, {max_pipeline_size, 1}]). ok * 使用HEAD方法的实例:: 56> ibrowse:send_req("http://www.erlang.org", [], head). {ok,"200", [{"Date","Mon, 28 Feb 2005 04:40:53 GMT"}, {"Server","Apache/1.3.9 (Unix)"}, {"Last-Modified","Thu, 10 Feb 2005 09:31:23 GMT"}, {"Etag","\"8d71d-1efa-420b29eb\""}, {"Accept-ranges","bytes"}, {"Content-Length","7930"}, {"Content-Type","text/html"}], []} * 使用OPTIONS方法的实例:: 62> ibrowse:send_req("http://www.sun.com", [], options). {ok,"200", [{"Server","Sun Java System Web Server 6.1"}, {"Date","Mon, 28 Feb 2005 04:44:39 GMT"}, {"Content-Length","0"}, {"P3p", "policyref=\"http://www.sun.com/p3p/Sun_P3P_Policy.xml\", CP=\"CAO DSP COR CUR ADMa DEVa TAIa PSAa PSDa CONi TELi OUR SAMi PUBi IND PHY ONL PUR COM NAV INT DEM CNT STA POL PRE GOV\""}, {"Set-Cookie", "SUN_ID=X.X.X.X:169191109565879; EXPIRES=Wednesday, 31-Dec-2025 23:59:59 GMT; DOMAIN=.sun.com; PATH=/"}, {"Allow", "HEAD, GET, PUT, POST, DELETE, TRACE, OPTIONS, MOVE, INDEX, MKDIR, RMDIR"}], []} * 使用Asynchronous請求的实例:: 18> ibrowse:send_req("http://www.google.com", [], get, [], [{stream_to, self()}]). {ibrowse_req_id,{1115,327256,389608}} 19> flush(). ... ... * 用async选项請求失败的实例:: 这儿没有返回 {ibrowse_req_id, ReqId}格式,而是返回错误代码: 68> ibrowse:send_req("http://www.earlyriser.org", [], get, [], [{stream_to, self()}]). {error,conn_failed} * 即有代理又有用户认证的实例:: 17> ibrowse:send_req("http://www.erlang.se/lic_area/protected/patches/erl_756_otp_beam.README", [], get, [], [{proxy_user, "XXXXX"}, {proxy_password, "XXXXX"}, {proxy_host, "proxy"}, {proxy_port, 8080}, {basic_auth, {"XXXXX", "XXXXXX"}}]). ... ... ibrowse是一个HTTP客户端,下面是ibrowse的特性:: - RFC2616 compliant (AFAIK) - 支持 GET, POST, OPTIONS, HEAD, PUT, DELETE, TRACE, MKCOL, PROPFIND, PROPPATCH, LOCK, UNLOCK, MOVE and COPY - 支持 HTTP/0.9, HTTP/1.0 and HTTP/1.1 - 支持 chunked encoding - Can generate requests using Chunked Transfer-Encoding - Pools of connections to each webserver - Pipelining support - 下载到文件 - Asynchronous requests. Responses are streamed to a process - 基本的认证 - 支持代理认证 - 可以用SSL与安全webservers交互 - 其他特性