2014-01-08 53 views
1

我正在嘗試在Racket中重新編寫一些Common Lisp網頁抓取代碼。Racket中的客戶端Cookie

在Common Lisp的,我張貼的登錄請求,並存儲Cookie的罐子隨後的GET:

(defun login (username password) 
    "Logs in to www.example.com. Returns a cookie-jar containing authentication details." 
    (let ((cookie-jar (make-instance 'drakma:cookie-jar))) 
    (drakma:http-request "http://www.example.com/login" 
      :method :post 
      :parameters `(("username" . ,username) ("password" . ,password)) 
      :cookie-jar cookie-jar) 
    cookie-jar)) 

; snip 

(defun get-page (page-num cookie-jar) 
    "Downloads a potentially invalid HTML page containing data to scrape. Returns a string containing the HTML." 
    (let ((url (concatenate 'string "http://www.example.com/data/" (write-to-string page-num)))) 
    (let ((body (drakma:http-request url :cookie-jar cookie-jar))) 
     (if (search "No data found." body) 
    nil 
    body)))) 

但是,我找不到球拍等效。 latest HTTP library完全沒有提及cookie,而AFAICT cookie library似乎更多地關於正確序列化和反序列化它們。

任何人都可以提出一種方法來重寫上述CL在球拍上,而不必實施一堆頭解析的東西?

回答

1

Racket圖書館沒有這樣的功能(撰寫本文時,2014年1月30日)。

Racket用戶名單上有some discussion關於此問題,並且有一個稱爲client-cookies的第三方庫解決了此問題。在編寫本書時,圖書館尚未準備好生產,但正在積極發展。