하리Hari

웹 주소에서 가져오기

웹 서버에 요청을 보내고 답을 받는 [HTTP] 모듈을 알아봐요.

[HTTP] 모듈은 웹 서버에 요청을 보내고 답을 받아요. 소켓 위에서 움직이는 도구라서(주소로 연결하고, 요청 글을 보내고, 답 글을 읽는 일을 대신 해 줘요) [소켓]처럼 Hana 런타임으로 실행할 때만 쓸 수 있어요. 이 문서의 실행 버튼에서는 “‘HTTP’ 모듈은 브라우저에서 사용할 수 없어요.“라는 에러가 나는 게 정상이에요.

도구 하는 일
<가져오기>(주소) 그 주소의 내용을 받아 와요 (두 번째 값으로 헤더 사전을 줄 수 있어요)
<보내기>(주소, 본문) 본문을 보내요 (POST). 세 번째 값으로 헤더 사전을 줄 수 있어요
<요청>(방식, 주소) PUT, DELETE, PATCH, HEAD처럼 다른 방식으로 요청해요 (세 번째 값은 본문, 네 번째 값은 헤더 사전이에요)

주소는 http://https://로 시작해야 해요. 세 도구는 모두 답을 사전으로 돌려줘요.

"status" 상태 번호(숫자)예요. 200은 성공, 404는 없는 주소예요
"body" 받은 내용(글)이에요
"headers" 답의 헤더 사전이에요. 이름은 모두 소문자예요 (예: "content-type")

404500처럼 서버가 오류 상태로 답해도 에러가 아니에요. 답을 받았으니 사전으로 돌려주고, 상태 번호를 보고 판단하면 돼요. 서버에 연결하지 못했거나 시간이 30초를 넘으면 에러가 나요. 주소가 가리키는 곳이 다른 곳으로 옮겨졌다는 답(리다이렉트)은 자동으로 따라가요.

[HTTP]에서 <가져오기>를 가져오자

'답'을 [사전]인 <가져오기>("https://example.com/")로 정하자

만약 ('답'의 "status" == 200) 라면:
    '답'의 "body"를 출력하자
그렇지 않다면:
    틀"안 되네요: {'답'의 "status"}"를 출력하자

보내고 받기

[HTTP]에서 <보내기>를 가져오자

'답'을 [사전]인 <보내기>("https://example.com/메모", "오늘 할 일", {"Content-Type": "text/plain"})로 정하자
'답'의 "status"를 출력하자

헤더 사전에는 글자만 담을 수 있어요. 요청에는 User-Agent: hari 헤더가 기본으로 붙는데, 같은 이름을 주면 내가 준 값이 우선해요.

알아 둘 것

  • 받은 내용은 32MB까지만 읽어요. 더 크면 에러가 나요.
  • 받은 글이 UTF-8이 아니면 읽을 수 없는 글자는 로 바뀌어요.
  • --allow-net=false로 실행하면 이 모듈도 막혀요(소켓 문서의 마지막 절을 보세요).
놀이터
결과
코드를 작성하고 '실행' 버튼을 눌러보세요.