2010-06-20 5 views
2

여기에 코드입니다. 유일한 문제는 잘못된 사용자 이름이나 암호를 사용하는 경우, 그것은 그냥 영원히 urlopen 문을 실행 유지 오류를 throw하지 않습니다파이썬 urllib2가 HTTPBasicAuthHandler

feed= URL.urlopen('https://mail.google.com/mail/feed/atom') 

@ URL로 열 영원히 소요됩니다.

사용자 이름/비밀번호가 잘못된지 어떻게 알 수 있습니까?

나는이 기능에 대한 시간 초과를 생각했지만 그때는 모든 오류가 발생하고 인터넷이 느려지고 인증 오류가 발생합니다.

답변

3

더 정확하게 urllib2.HTTPError 오류가 발생하고 코드 필드가 401로 설정되면 아래에서 몇 가지 수정 된 코드를 볼 수 있습니다. 나는 당신의 일반적인 try/except 구조를 떠났지만, 정말로, 일반적인 except를 사용하지 말고, 당신이 기대할 수있는 것을 잡아라!

def get_unread_msgs(user, passwd): 
    auth = URL.HTTPBasicAuthHandler() 
    auth.add_password(
      realm='New mail feed', 
      uri='https://mail.google.com', 
      user='%s'%user, 
      passwd=passwd 
      ) 
    opener = URL.build_opener(auth) 
    URL.install_opener(opener) 
    try: 
     feed= URL.urlopen('https://mail.google.com/mail/feed/atom') 
     return feed.read() 
    except HTTPError, e: 
     if e.code == 401: 
      print "authorization failed"    
     else: 
      raise e # or do something else 
    except: #A general except clause is discouraged, I let it in because you had it already 
     return None 

난 그냥, 여기 테스트를 완벽하게

+0

예, 작동 작동합니다. 그러나 암호가 올바르지 않으면 중지됩니다. 예외를 throw하지 않습니다. 계속 처리 중입니다. feed = URL.urlopen ('https://mail.google.com/mail/feed/atom') –

+0

네트워크 설정을 확인할 수 있습니다 (아마 401에 미쳐 버린 이상한 프록시 뒤에있을 수 있습니다). ?). 나는 여기에, 구글 피드, 올바른 사용자 이름과 잘못된 비밀 번호와 스니퍼 잘 작동, 그것을 테스트하지만 실패 무한한 처리에 가지 않습니다. – KillianDS