2017-11-26 1 views
1

Google App Engine 표준 환경에서 urllib을 사용하여 HTTPS 요청을하면 소켓 대신 urlfetch를 사용하고 있다고 말하는 AppEnginePlatformWarning이 표시됩니다.AppEnginePlatformWarning - 소켓을 사용하는 이유?

나는 경고를 성가신 것으로 느꼈으므로 나는 그것을 사용하지 않았다.

# Use the App Engine Requests adapter. This makes sure that Requests uses 
# URLFetch. 
requests_toolbelt.adapters.appengine.monkeypatch() 

# squelch warning 
requests.packages.urllib3.disable_warnings(
    requests.packages.urllib3.contrib.appengine.AppEnginePlatformWarning 
) 

제 질문은 - 소켓으로 전환해야 할 충분한 이유가 있습니까? 특히 urlfetch를 사용하면 무엇이 잘못됩니까?

답변

1

실제로 urlfetch을 사용하면 아무런 문제가 없습니다. 실제로는 GAE에서 아웃 바운드 HTTP (S) 요청을 실행하는 데 권장되는 방법입니다. Issuing HTTP(S) Requests (requests - 관련 참고 광산에 중점)에서 :

앱 엔진은 URL 아웃 바운드 HTTP (S) 요청을 발행하는 서비스를 가져 오기 사용합니다.

URL 가져 오기 서비스가 구현되는 방법과 URL 가져 오기 요청에서 어떤 헤더가 전송되는지에 대한 자세한 내용은 Outbound Requests을 참조하십시오. urlfetch.fetch 방법을 사용, 아웃 바운드 HTTP 요청을 발행하려면 HTTP 요청

발행

. 향상된 코드 이식성을 위해 Python 표준 라이브러리 urllib, urllib2 또는 httplib을 사용하여 HTTP 요청을 발행 할 수도 있습니다. App Engine에서 이러한 라이브러리를 사용하면 App Engine의 URL 가져 오기 서비스를 사용하여 HTTP 요청을 수행합니다. URLFetch를 사용하도록 구성한 경우 타사 requests 라이브러리를 사용할 수도 있습니다.

소켓 지원 GAE에서 문제가 하나 오히려입니다, 그것은 제한 사항의 상당히 긴 목록, Sockets Python API Overview, 특히 Limitations and restrictions 섹션을 참조와 함께 제공됩니다.

표시되는 경고는 제 3 자 requests 라이브러리에서 가져온 것이므로 위의 인용문에 강조 표시되어 있습니다. IMHO GAE 컨텍스트에서 경고를 단순히 무시하거나 마스크하는 것이 안전합니다.

+0

경고는 App Engine에 대해 명시 적으로 작성되었습니다. 이는 혼란 스럽습니다. 실제로 urllib3에서 온 것이지 요청이 아닙니다. 요청은 단순히 패키지 자체 내에서 패키지합니다. – JamesHutchison

관련 문제