ETrade API에 대한 액세스 권한을 부여하는 클래스를 작성 중입니다. (이론적으로 OAuth 1.0을 사용하는 모든 API에서 실제로 작동 할 수 있습니다.) 전체 코드는 in my GitHub입니다. 내 질문에 관련 코드는 다음과 같습니다 당신이 볼 수 있듯이, 나는 인증 URL을 인쇄하여 사용자가 복사 및 브라우저에 붙여 넣어야합니다Python에서 브라우저에 URL을로드하십시오.
base_url = 'https://etws.etrade.com'
class Authorization:
def __init__(self):
self.oauth_session = requests_oauthlib.OAuth1Session(config.oauth_consumer_key, config.consumer_secret,
callback_uri='oob')
self.oauth_url = base_url + "/oauth"
print(self.get_authorization_url())
self.run_authorization_server()
// ... snip ...
def run_authorization_server(self):
host_name = 'localhost'
host_port = 80
with server.HTTPServer((host_name, host_port), AuthenticationCallbackHandler) as httpd:
httpd.serve_forever()
. IntelliJ IDEA에서 실행하면 콘솔에서 구문 분석되어 클릭 할 수 있습니다. 이 URL은 사용자가 계정에 로그인하고 내 앱이 액세스 할 수 있도록 권한을 부여하는 페이지를로드합니다. 결과는 http://localhost
에 대한 답장으로 반환됩니다. 그렇기 때문에 검증 토큰으로 요청을 청취하기 위해 HTTPServer 인스턴스를 시작합니다.
이 프로세스는 이상적이지 않습니다. 인증 URL을 프로그래밍 방식으로로드하려고합니다. 합병증은 인증을로드하기 전에 로컬 서버가 시작되도록해야한다는 것입니다. 내가 알 수있는 한 server_forever()
은 현재 스레드를 차단합니다. 이것은 서버를 시작하기 위해 스레드를 시작해야 함을 의미합니다. 어떻게해야합니까? 더 중요한 것은 URL을로드하는 것이 안전하도록 서버가 시작되었음을 어떻게 알 수 있습니까? 마지막으로 브라우저에서 실제로 URL을로드하려면 어떻게해야합니까?