이 게시물의 목적은 urequests 모듈을 사용하여 MicroPython으로 HTTP GET 요청을 수행하는 방법을 설명하는 것입니다. 이 튜토리얼은 ESP32와 ESP8266 모두에서 실행되는 MicroPython으로 테스트되었습니다.
소개
이 게시물의 목적은 urequests 모듈을 사용하여 MicroPython으로 HTTP GET 요청을 수행하는 방법을 설명하는 것 입니다. 이 튜토리얼은 ESP32와 ESP8266 모두에서 실행되는 MicroPython으로 테스트되었습니다. 아래에 표시된 수치는 ESP32의 테스트에서 가져온 것이지만 ESP8266의 결과는 비슷합니다. 여기 에서 라이브러리의 소스 코드에 액세스할 수 있습니다 .
중요: 작성 당시 사용된 MicroPython 버전에는 urequest가 포함되어 있었습니다 . 이는 변경될 수 있으며 향후 배포에는 기본적으로 포함되지 않을 수 있습니다. 따라서 단순히 가져올 수 없는 경우 이전에 수동으로 설치해야 할 수 있습니다.
당연히 이 튜토리얼을 따르려면 먼저 WiFi 네트워크에 연결해야 인터넷에 액세스할 수 있습니다. 이 튜토리얼에서는 그 방법을 다루지 않을 것입니다. 수동으로 연결하려면 이 상세 가이드 를 확인하세요 . MicroPython이 부팅될 때 WiFi 네트워크에 대한 자동 연결을 구현하지 않으려면 이 다른 가이드 를 확인하세요 .
MicroPython 프롬프트에 연결하고 한 번에 명령을 전송하여 코드를 실행합니다. 원하는 경우 여기에 설명된 대로 스크립트에 명령을 작성하고 컴퓨터에서 스크립트를 실행할 수 있습니다 . 또 다른 옵션은 여기에서 볼 수 있는 것처럼 스크립트를 MicroPython의 파일 시스템에 업로드하고 프롬프트에서 실행하는 것 입니다.
저는 Putty를 사용하여 프롬프트에 연결할 것이지만 직렬 연결을 설정할 수 있는 다른 소프트웨어를 사용할 수도 있습니다. ESP32에서 아직 MicroPython을 구성하지 않은 경우 이 이전 게시물을 참조하세요 . ESP8266을 사용하는 경우 이것을 확인 하십시오 .
코드
우선 WiFi 네트워크에 연결한 후 이 튜토리얼에 필요한 모든 기능이 있는 urequests 모듈 을 가져올 것 입니다.
1 | import urequests |
다음으로 실제 HTTP GET 요청을 수행하려면 urequests 모듈 의 get 함수 를 호출 하여 요청 대상 URL을 입력으로 전달하기만 하면 됩니다. 우리는 이전에 많은 튜토리얼에서 사용한 가짜 온라인 REST API가 있는 웹사이트를 사용할 것입니다.
HTTP GET 요청으로 도달할 웹사이트의 URL은 http://jsonplaceholder.typicode.com/albums/1 이며 웹 브라우저에서 접속하여 예상 결과를 확인할 수 있습니다. 액세스하면 더미 앨범 객체의 JSON 구조인 그림 1과 유사한 것을 얻을 수 있습니다.
그림 1 - HTTP GET 요청의 예상 출력.
MicroPython에서 언급된 GET 요청을 수행하는 코드는 다음과 같습니다. get 함수 에 대한 호출의 출력으로 Response 클래스의 개체 가 반환됩니다.
1 2 |
response = urequests.get('http://jsonplaceholder.typicode.com/albums/1') print(type(response)) |
그림 2에서 확인할 수 있듯이 반환된 객체는 실제로 Response 클래스입니다.
그림 2 - get 메소드 호출에 의해 반환된 객체의 클래스 .
이제 HTTP 요청 응답의 실제 내용에 액세스하려면 아래와 같이 text 속성 에 액세스하기만 하면 됩니다 .
1 2 |
print(response.text) print(type(response.text)) |
아래 그림 3에서 이 명령의 예상 출력을 확인할 수 있습니다.
그림 3 - HTTP GET 요청의 응답 인쇄.
이 속성은 내용이 포함된 문자열을 반환합니다. 그럼에도 불구하고 우리가 보았듯이 요청의 응답은 JSON 형식으로 반환 됩니다. 따라서 원하는 경우 구문 분석된 콘텐츠가 포함된 사전을 반환하는 json 속성에 액세스할 수 있습니다 .
1 2 |
parsed = response.json() print(type(parsed)) |
이 명령의 결과는 그림 4에 나와 있습니다. 결과가 실제로 Python 사전임을 확인합니다.
그림 4 - 구문 분석된 응답의 JSON 콘텐츠 가져오기.
라이브러리 의 소스 코드 에서 볼 수 있듯이 이 속성은 ujson 라이브러리를 사용 하여 콘텐츠를 구문 분석합니다. 이 이전 게시물 에서 ujson 구문 분석에 대해 자세히 알아볼 수 있습니다 . 이제 구문 분석된 객체가 있으므로 사전 객체의 키를 사용하여 각 개별 JSON 값에 액세스할 수 있습니다.
1 2 삼 |
print(parsed["userId"]) print(parsed["id"]) print(parsed["title"]) |
아래 그림 5에서 JSON 구조의 각 값에 접근한 결과를 확인한다. 결과는 text 속성 에서 얻은 JSON 구조와 일치 합니다.
그림 5 - Python 사전을 통해 JSON 구조의 값에 액세스
요청 응답의 내용을 검색하는 다른 흥미로운 방법은 응답을 바이트 단위로 반환하는 content 속성을 사용하는 것입니다.
1 2 |
print(response.content) print(type(response.content)) |
아래 그림 6에서 명령 결과를 확인하십시오.
그림 6 - HTTP GET 요청의 응답(바이트).
마무리를 위해 상태 코드와 해당 상태 코드의 텍스트 이유도 얻습니다. 이를 위해 아래 코드에서 볼 수 있는 것처럼 status_code 및 reason 속성을 사용합니다 .
1 2 |
print(response.status_code) print(response.reason) |
그림 7은 이러한 명령의 결과를 보여줍니다. 결과에는 HTTP 의 " OK " 코드에 해당 하는 코드 200이 있습니다.
그림 7 – HTTP 상태 코드 및 이유 가져오기.