2014-01-08 4 views
1

라켓에 Common Lisp 웹 스크래핑 코드를 다시 작성하려고합니다. 커먼 리스프에서 라켓의 클라이언트 측 쿠키

, 나는 로그인 요청을 게시, 이후의 쿠키 항아리를 저장하고있어 가져옵니다

(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은 쿠키에 대해 전혀 언급하지 않으며, AFAICT cookie library은 쿠키를 올바르게 serialize하고 역 직렬화하는 방법에 대한 것 같습니다.

누구나 헤더 파싱 내용을 구현하지 않고도 위의 CL을 라켓에 다시 작성하는 방법을 제안 할 수 있습니까?

답변

1

라켓 라이브러리에는 이러한 기능이 없습니다 (작성 시점, 2014 년 1 월 30 일).

라켓 사용자 목록에 some discussion이 있었고 문제를 해결하는 client-cookies이라는 타사 라이브러리가 있습니다. 이 글을 쓰는 시점에 도서관은 아직 생산 준비가되어 있지 않지만 적극적으로 개발 중입니다.