Hylang에서 적당히 HTTP 서버를 세우기(2) (2018년 7월 현재)

13938 단어 hyhylang서버HTTP

지난 번 계속



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월 현재)

좋은 웹페이지 즐겨찾기