2017-09-03 6 views
0

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을로드하려면 어떻게해야합니까?

답변