Pyodide에서 네트워크 요청을 구현하는 3가지 방법
7287 단어 httppyodidepythonprogramming
의문
앞서 Online Python Tool을 언급했는데, 핵심 기술은 파이썬을 웹 페이지에서 실행할 수 있는 Pyodide 라이브러리라는 도구를 사용하는 것이지만 학습 과정에서 모든 파이썬 내장 라이브러리나 확장 라이브러리가 아니라는 것을 발견했습니다.
requests
와 같은 실행 가능은 지원되지 않습니다.이 issue 의 논의에 따르면,
requests
는 Lib/http.client.py
에 의존하는 Lib/sockets.py
에 의존하는 socketmodule.c
를 필요로 하는 <sys/socket.h>
에 의존합니다. Emscripten은 <sys/socket.h>
지원을 제공하지만 이를 사용하는 경우 http 요청은 웹 소켓 연결을 허용하는 사용자 정의 서버와 함께 사용하거나 요청을 실제 http 요청으로 전달할 수 있는 서버를 통해 모든 요청을 프록시 처리한 경우에만 작동합니다. ). 그래서 그것은 이상적이지 않을 것입니다.따라서 로컬 Python 프로그램이
requests
메서드를 사용하는 경우 온라인 Python 도구로 전환하여 실행할 때 네트워크 요청 사용을 업데이트해야 합니다. 여기에서는 네트워크 요청의 세 가지 방법을 간략하게 소개합니다.해결책
1. http.open_url
주어진 URL을 동기식으로 가져옵니다.
import pyodide
print(pyodide.http.open_url('https://mocki.io/v1/d4867d8b-b5d5-4a48-a4ab-79131b5809b8').read())
온라인 데모: Python Playground - http.open_url
2. http.pyfetch
URL을 가져오고 응답을 반환합니다.
import pyodide
async def get_data():
response = await pyodide.http.pyfetch('https://mocki.io/v1/d4867d8b-b5d5-4a48-a4ab-79131b5809b8')
data = await response.json()
print(data)
get_data()
온라인 데모: Python Playground - http.pyfetch
이 방법은 이미지 데이터를 얻는 데 권장됩니다.
# request image
response = await pyodide.http.pyfetch('https://gcore.jsdelivr.net/gh/openHacking/static-files@main/img/16576149784751657614977527.png')
# Return the response body as a bytes object
image_data = await response.bytes()
자세한 참조 사례: Python Image to ASCII Online
3. js 모듈에서 가져오기
Pyodide는 js API를 래핑하고 기본 js 가져오기 API를 사용하여 네트워크 요청을 구현합니다.
import json
from js import fetch, JSON
async def get_data():
response = await fetch('https://mocki.io/v1/d4867d8b-b5d5-4a48-a4ab-79131b5809b8',{'method':'GET'})
data = await response.json()
print(JSON.stringify(data))
await get_data()
온라인 데모: Python Playground - js fetch
결론
이상으로 정리한 Pyodide에서 일반적으로 사용되는 세 가지 네트워크 요청 방법입니다. 부족한 점이 많을 수 있습니다. 더 좋은 방법이 있다면 공유 부탁드립니다.
참조
Reference
이 문제에 관하여(Pyodide에서 네트워크 요청을 구현하는 3가지 방법), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/openhacking/3-ways-to-implement-network-requests-in-pyodide-4e5n텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)