Hylang에서 적당히 HTTP 서버를 세우기(2) (2018년 7월 현재)
지난 번 계속
Hylang에서 적당히 HTTP 서버를 세우기(1) (2018년 7월 현재)
핸들러를 쓰자.
SimpleHTTPRequestHandler를 다시 작성하여 적절한 텍스트를 반환하려고합니다.
BaseHTTPRequestHandler를 상속받은 클래스를 작성합시다.
Lisper라면 친숙한 클래스의 계승.
현재의 Hylang에서는, 클래스의 선언은 대체로 이런 느낌.
(defclass <class-name> [<superclass1> <superclass2>]
<methods>)
이것에 맞추어 BaseHTTP...를 상속한 EchoHandler 되는 것을 쓴다(이름은 적당히 붙였다.깊은 의미는 없다)
(defclass EchoHandler [BaseHTTPRequestHandler]
(defn do_GET [self]
(setv content-len (int (.get self.headers "content-length")))
(setv requestBody (-> (.read self.rfile content-len)
(.decode "UTF-8")))
(print requestBody)
(.send_response self 200)
(.send_header self "Content-type" "text/json")
(.end_headers self)
(.wfile.write self (.encode "テキスト\n" "utf-8"))))
그리고는 이것을 핸들러로 설정해 실행할 뿐.
전체 코드는 이것만
(import [http.server [HTTPServer SimpleHTTPRequestHandler BaseHTTPRequestHandler]]
[urllib.parse [urlparse]]
json)
(defclass EchoHandler [BaseHTTPRequestHandler]
(defn do_GET [self]
(setv content-len (int (.get self.headers "content-length")))
(setv requestBody (-> (.read self.rfile content-len)
(.decode "UTF-8")))
(print requestBody)
(.send_response self 200)
(.send_header self "Content-type" "text/json")
(.end_headers self)
(.wfile.write self (.encode "テキスト\n" "utf-8"))))
(setv httpd (HTTPServer (, "localhost" 8887) EchoHandler))
(.serve_forever httpd)
결과
Body에 들어간 JSON을 읽어 보자.
요청으로 날아오기 쉬운 것 베스트 3에는 들어 있을 JSON을 읽어 본다
하고 싶은 것은 간단하고, 날아온 request-body에 json.loads 함수를 적용하고 있을 뿐.
(import [http.server [HTTPServer SimpleHTTPRequestHandler BaseHTTPRequestHandler]]
[urllib.parse [urlparse]]
json)
(defclass EchoHandler [BaseHTTPRequestHandler]
(defn do_GET [self]
(setv content-len (int (.get self.headers "content-length")))
(setv request-body (-> (.read self.rfile content-len)
(.decode "UTF-8")))
(print request-body)
(setv json-data (.loads json request-body))
(print json-data)
(print (. json-data ["type"]))
(print (. json-data ["params"]))
(.send_response self 200)
(.send_header self "Content-type" "text/json")
(.end_headers self)
(.wfile.write self (.encode "テキスト\n" "utf-8"))))
(setv httpd (HTTPServer (, "localhost" 8887) EchoHandler))
(.serve_forever httpd)
보낸 명령
curl -H "Content-type: application/json" -X GET -d "{\"type\" : \"message\", \"params\" : \"メッセージ本文\"}" http://localhost:8887/
결과
다음에 할 일
JSON으로 값 반환
적당히 무언가의 처리를 더해 보자
Hylang에서 적당히 HTTP 서버를 세우기(3) (2018년 7월 현재)
Reference
이 문제에 관하여(Hylang에서 적당히 HTTP 서버를 세우기(2) (2018년 7월 현재)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/MeguruMokke/items/abde4ab668b17c39393d
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
(defclass <class-name> [<superclass1> <superclass2>]
<methods>)
(defclass EchoHandler [BaseHTTPRequestHandler]
(defn do_GET [self]
(setv content-len (int (.get self.headers "content-length")))
(setv requestBody (-> (.read self.rfile content-len)
(.decode "UTF-8")))
(print requestBody)
(.send_response self 200)
(.send_header self "Content-type" "text/json")
(.end_headers self)
(.wfile.write self (.encode "テキスト\n" "utf-8"))))
(import [http.server [HTTPServer SimpleHTTPRequestHandler BaseHTTPRequestHandler]]
[urllib.parse [urlparse]]
json)
(defclass EchoHandler [BaseHTTPRequestHandler]
(defn do_GET [self]
(setv content-len (int (.get self.headers "content-length")))
(setv requestBody (-> (.read self.rfile content-len)
(.decode "UTF-8")))
(print requestBody)
(.send_response self 200)
(.send_header self "Content-type" "text/json")
(.end_headers self)
(.wfile.write self (.encode "テキスト\n" "utf-8"))))
(setv httpd (HTTPServer (, "localhost" 8887) EchoHandler))
(.serve_forever httpd)
(import [http.server [HTTPServer SimpleHTTPRequestHandler BaseHTTPRequestHandler]]
[urllib.parse [urlparse]]
json)
(defclass EchoHandler [BaseHTTPRequestHandler]
(defn do_GET [self]
(setv content-len (int (.get self.headers "content-length")))
(setv request-body (-> (.read self.rfile content-len)
(.decode "UTF-8")))
(print request-body)
(setv json-data (.loads json request-body))
(print json-data)
(print (. json-data ["type"]))
(print (. json-data ["params"]))
(.send_response self 200)
(.send_header self "Content-type" "text/json")
(.end_headers self)
(.wfile.write self (.encode "テキスト\n" "utf-8"))))
(setv httpd (HTTPServer (, "localhost" 8887) EchoHandler))
(.serve_forever httpd)
curl -H "Content-type: application/json" -X GET -d "{\"type\" : \"message\", \"params\" : \"メッセージ本文\"}" http://localhost:8887/
Reference
이 문제에 관하여(Hylang에서 적당히 HTTP 서버를 세우기(2) (2018년 7월 현재)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/MeguruMokke/items/abde4ab668b17c39393d텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)