处理Ocamlnet中的Cookie

时间:2013-06-21 23:07:01

标签: cookies http-headers ocaml

我正在尝试编写一个机器人来提取一些仅供经过身份验证的用户使用的数据。我选择了ocaml (v. 3.12.1)ocamlnet (v. 3.6.5)。脚本的第一部分向网站发送POST请求,通过我收到的html,我可以看出身份验证有效(此代码示例中p1p2的值显然不是我正在使用的那些。)

open Http_client
open Nethttp

let pipeline = new pipeline

let () =
  let post_call = new post
    "http://www.kraland.org/main.php?p=1&a=100"
    [("p1", "username");
     ("p2", "password");
     ("Submit", "Ok!")]
  in
  pipeline#add post_call;
  pipeline#run();

然后我提取存储了php会话ID,帐户名,密码哈希等的cookie,将它们放在下一个请求的标题中并运行它。这就是我遇到麻烦的地方:我系统地让每个匿名访客都感到无聊。

let cookies = Header.get_set_cookie post_call#response_header in
let get_call = new get "http://www.kraland.org/main.php?p=1" in
let header = get_call#request_header `Base in
Header.set_set_cookie header cookies;
pipeline#add get_call;
pipeline#run();

当我打印cookie的内容时,我确实得到了一些奇怪的东西:我希望cookie的域名为kraland.org,但似乎并非如此。这是我与输出一起使用的打印命令:

List.iter (fun c -> Printf.printf "%.0f [%s%s:%b] %s := %s\n"
  (match c.cookie_expires with None -> -1. | Some f -> f)
  (match c.cookie_domain with None -> "" | Some s -> s)
  (match c.cookie_path with None -> "" | Some s -> s)
  c.cookie_secure c.cookie_name c.cookie_value)
  cookies;

-1 [/:false] PHPSESSID := 410b97b0536b3e949df17edd44965926
1372719625 [:false] login := username
1372719625 [:false] id := myid
1372719625 [:false] password := fbCK/0M+blFRLx3oDp+24bHlwpDUy7x885sF+Q865ms=
1372719625 [:false] pc_id := 872176495311

编辑:我使用Haskell的Http-conduit-browser解决了这个问题,它就像使用something very much like the doc's example的魅力一样。

0 个答案:

没有答案