summaryrefslogtreecommitdiff
path: root/src/http.lisp
diff options
context:
space:
mode:
authorckonstanski <ckonstanski@pippiandcarlos.com>2020-12-23 10:43:53 -0700
committerckonstanski <ckonstanski@pippiandcarlos.com>2020-12-23 10:43:53 -0700
commit4f289129590466c8147a53ca19f7a68196624adc (patch)
tree2063be2790d8ff1ed2356a8b0f84d6f8268ee257 /src/http.lisp
initial import
Diffstat (limited to 'src/http.lisp')
-rw-r--r--src/http.lisp66
1 files changed, 66 insertions, 0 deletions
diff --git a/src/http.lisp b/src/http.lisp
new file mode 100644
index 0000000..891f730
--- /dev/null
+++ b/src/http.lisp
@@ -0,0 +1,66 @@
+;;; -*- Mode: Lisp; Syntax: ANSI-Common-Lisp; Base: 10 -*-
+(declaim (optimize (speed 0) (safety 3) (debug 3)))
+
+(in-package #:org-ckons-http)
+
+(defmacro with-cookie-jar (&rest body)
+ `(let ((cookie-jar (make-instance 'drakma:cookie-jar)))
+ ,@body))
+
+(defun drakma-request (url
+ cookie-jar
+ &key
+ (method :get)
+ (content-type "application/x-www-form-urlencoded")
+ (content nil)
+ (user-agent :firefox)
+ (redirect t)
+ (auto-referer t)
+ (additional-headers nil)
+ (connection-timeout 20)
+ (proxy nil)
+ (proxy-basic-authorization nil)
+ (basic-authorization nil))
+ (drakma:http-request url
+ :cookie-jar cookie-jar
+ :method method
+ :content-type content-type
+ :content content
+ :user-agent user-agent
+ :redirect redirect
+ :auto-referer auto-referer
+ :connection-timeout connection-timeout
+ :additional-headers additional-headers
+ :proxy proxy
+ :proxy-basic-authorization proxy-basic-authorization
+ :basic-authorization basic-authorization
+ :close t))
+
+(defun escape-url (url)
+ (let ((escaped-url url))
+ (setf escaped-url (ppcre:regex-replace-all "%" escaped-url "%25"))
+ (setf escaped-url (ppcre:regex-replace-all "\\?" escaped-url "%3F"))
+ (setf escaped-url (ppcre:regex-replace-all "#" escaped-url "%23"))
+ (setf escaped-url (ppcre:regex-replace-all "/" escaped-url "%2F"))
+ (setf escaped-url (ppcre:regex-replace-all "'" escaped-url "%27"))
+ (setf escaped-url (ppcre:regex-replace-all " " escaped-url "%20"))
+ (setf escaped-url (ppcre:regex-replace-all "\\(" escaped-url "%28"))
+ (setf escaped-url (ppcre:regex-replace-all "\\)" escaped-url "%29"))
+ (setf escaped-url (ppcre:regex-replace-all ":" escaped-url "%3A"))
+ escaped-url))
+
+(defun unescape-url (url)
+ (let ((unescaped-url url))
+ (setf unescaped-url (ppcre:regex-replace-all "%25" unescaped-url "%"))
+ (setf unescaped-url (ppcre:regex-replace-all "%3F" unescaped-url "?"))
+ (setf unescaped-url (ppcre:regex-replace-all "%23" unescaped-url "#"))
+ (setf unescaped-url (ppcre:regex-replace-all "%2F" unescaped-url "/"))
+ (setf unescaped-url (ppcre:regex-replace-all "%27" unescaped-url "'"))
+ (setf unescaped-url (ppcre:regex-replace-all "%20" unescaped-url " "))
+ (setf unescaped-url (ppcre:regex-replace-all "%28" unescaped-url "("))
+ (setf unescaped-url (ppcre:regex-replace-all "%29" unescaped-url ")"))
+ (setf unescaped-url (ppcre:regex-replace-all "%3A" unescaped-url ":"))
+ unescaped-url))
+
+(defun newlines-to-backslash-n (body)
+ (cl-ppcre:regex-replace-all #\Newline body "\\\\n"))