分享web开发知识

注册/登录|最近发布|今日推荐

主页 IT知识网页技术软件开发前端开发代码编程运营维护技术分享教程案例
当前位置:首页 > 代码编程

webserver

发布时间:2023-09-06 01:10责任编辑:蔡小小关键词:暂无标签
(defun http-char (c1 c2 &optional (default #\space))(let ((code (parse-integer (coerce (list c1 c2) ‘string):radix 16:junk-allowed t)))(if code(code-char code)default)))(defun decode-param (s)(labels ((f (lst)(when lst(case (car lst)(#\% (cons (http-char (cadr lst) (caddr lst))(f (cdddr lst))))(#\+ (cons #\space (f (cdr lst))))(otherwise (cons (car lst) (f (cdr lst))))))))(coerce (f (coerce s ‘list )) ‘string)))(defun parse-params (s)(let* ((i1 (position #\= s))(i2 (position #\& s)))(cond (i1 (cons (cons (intern (string-upcase (subseq s 0 i1)))(decode-param (subseq s (1+ i1) i2)))(and i2 (parse-params (subseq s (1+ i2))))))((equal s "") nil)(t s))))(defun parse-url (s)(let* ((url (subseq s(+ 2 (position #\space s))(position #\space s :from-end t) ))(x (position #\? url)) )(if x(cons (subseq url 0 x) (parse-params (subseq url (1+ x))))(cons url ‘()))))(defun get-header (stream)(let* ((s (read-line stream)) ??(h (let ((i (position #\: s))) ??(when i ??(cons (intern (string-upcase (subseq s 0 i))) ????(subseq s (+ 2 i)))))))(when h(cons h (get-header stream)))))(defun get-content-params (stream header)(let ((length (cdr (assoc ‘content-header header)))) (when length(let ((content (make-string (parse-integer length))))(read-sequence content stream)(parse-params content)))))(defun serve (request-handler)(let ((socket (socket-server 8080)))(unwind-protect (loop (with-open-stream (stream (socket-accept socket))(let* ((url (parse-url (read-line stream))) ??(path (car url)) ??(header (get-header stream)) ??(params (append (cdr url) ?????(get-content-params stream header))) ??(*standard-output* stream))(funcall request-handler path header params))))(socket-server-close socket))))(defun hello-request-handler (path header params)(if (equal path "greeting")(let ((name (assoc ‘name params )))(if (not name)(princ "<html><form>What is your name? <input name=‘name‘/> </form><html>")(format t "<html>Nice to meet you,~a! </html>" (cdr name))))(princ "Sorry I don‘t know the page.")))

最后的显示似乎有点问题

webserver

原文地址:http://www.cnblogs.com/tclan126/p/7502673.html

知识推荐

我的编程学习网——分享web前端后端开发技术知识。 垃圾信息处理邮箱 tousu563@163.com 网站地图
icp备案号 闽ICP备2023006418号-8 不良信息举报平台 互联网安全管理备案 Copyright 2023 www.wodecom.cn All Rights Reserved