2017-11-24 25 views
0

내가 urllib2.URLError 무엇입니까 '(mechanize.browser.open를 호출하는 동안 오류를 내 HTTPS 대지').얻기 urllib2.URLError는 <urlopen 오류 EOF 프로토콜 위반 (_ssl.c : 661)가 발생> 기계화 공개 방법에

웹을 검색했지만 나에게 도움이되는 내용이 없습니다.

Traceback (most recent call last): 
    File "C:/Users/Himanshu/Desktop/UIET Rank system.py", line 27, in <module> 
    myBrowser.open("https://uwp.puchd.ac.in/common/viewmarks.aspx") 
    File "C:\Python27\lib\site-packages\mechanize\_mechanize.py", line 254, in open 
    return self._mech_open(url_or_request, data, timeout=timeout) 
    File "C:\Python27\lib\site-packages\mechanize\_mechanize.py", line 284, in _mech_open 
    response = UserAgentBase.open(self, request, data) 
    File "C:\Python27\lib\site-packages\mechanize\_opener.py", line 195, in open 
    response = urlopen(self, req, data) 
    File "C:\Python27\lib\site-packages\mechanize\_urllib2_fork.py", line 352, in _open 
    '_open', req) 
    File "C:\Python27\lib\site-packages\mechanize\_urllib2_fork.py", line 340, in _call_chain 
    result = func(*args) 
    File "C:\Python27\lib\site-packages\mechanize\_urllib2_fork.py", line 1215, in https_open 
    return self.do_open(conn_factory, req) 
    File "C:\Python27\lib\site-packages\mechanize\_urllib2_fork.py", line 1160, in do_open 
    raise URLError(err) 
urllib2.URLError: <urlopen error EOF occurred in violation of protocol (_ssl.c:661)> 

Process finished with exit code 1 

기타 정보 :

import ssl 
print ssl.OPENSSL_VERSION 

output>> OpenSSL 1.0.2j 26 Sep 2016 

파이썬 버전

Python 2.7.13 (v2.7.13:a06454b1afa1, Dec 17 2016, 20:42:59) [MSC v.1500 32 bit (Intel)] on win32 
여기
import ssl 
try: 
    _create_unverified_https_context = ssl._create_unverified_context 
except AttributeError: 
    # Legacy Python that doesn't verify HTTPS certificates by default 
    pass 
else: 
    # Handle target environment that doesn't support HTTPS verification 
    ssl._create_default_https_context = _create_unverified_https_context 
import mechanize 
import operator 
from bs4 import BeautifulSoup 
import os 
myBrowser = mechanize.Browser() 
myBrowser.set_handle_robots(False) 
myBrowser.set_handle_refresh(False) 
myBrowser.open("https://uwp.puchd.ac.in/common/viewmarks.aspx") 

내가 점점 오전 오류입니다 : 여기

내 코드입니다

이 오류를 무시할 수있는 방법이 있습니까?

참고 :

내 응용 프로그램이 준비되어 있기 때문에, 단지 기계화 사용할
  • 및 년 전에 일하기 위하여 사용이 하지만 지금은 작동하지 않습니다와 나는 다시 전체 코드를 변경하지 않으 .
  • Windows에서 Pycharm을 사용하고 있습니다.
  • this webpage which I am trying to open을 열려고 시도하면 Chrome에도 '안전하지 않은 연결'이 표시되므로 웹 페이지로 이동해야합니다. 문제 일 수 있습니다. 또한이 웹 페이지에 대한 인증서가 없습니다.
  • 내 응용 프로그램은 보안과 관련이 없으므로 SSL 확인을 false로 설정하는 것이 좋습니다 (다른 게시물에서 시도했지만 실제로 작동하지 않았습니다). 목표는 응용 프로그램이 작동해야한다는 것입니다.

답변

1

이 사이트의 문제는 성공적으로 전원을 껐기 때문에 인증서 유효성 검사가 아닙니다. 문제는 대신 사이트가 더 이상 안전하지 않은 암호 (예 : 3DES 및 RC4 기반 암호) 만 지원한다는 것입니다. 보안상의 이유로 ssl 라이브러리의 기본 암호에 이러한 암호가 포함되어 있지 않습니다.

이러한 암호에 대한 지원을 추가하려면 수동으로 기본 암호 집합을 설정할 수 있습니다. 다음 줄은 제공된 암호로 DES-CBC3-SHA을 설정합니다. 이렇게하면 깨진 사이트에 액세스 할 수 있습니다.

ssl._DEFAULT_CIPHERS = ('DES-CBC3-SHA') 
myBrowser = mechanize.Browser() 
... 

이 설정은 특정 사이트에만 사용해야합니다. 이론상으로 모든 사이트를 처리하기 위해 _DEFAULT_CIPHERS에 대한 더 큰 암호 세트를 설정하는 것이 가능할 수도 있지만이 특정 사이트에는 DES-CBC3-SHA가 포함되어 있어도 TLS 핸드 셰이크에 실패하는 것처럼 보이는 추가 문제가 있습니다. DES-CBC3-SHA보다 새로운 암호 (예 : GCM)가 제공되는 경우 제공되는 암호 세트.

+0

Steffen Ullrich, 답변 해 주셔서 감사합니다. 위의 문장을 시도했지만 작동하지 않았습니다. 작동하게하는 몇 가지 제안 사항을 제안 해 주시겠습니까? –

+0

@darkPrince : 파이썬 2.7.12에서 저에게 효과적이었습니다. 하지만 2.7.13에서는 작동하지 않는 것 같습니다.이 부분을 자세히 살펴 보겠습니다. –

+0

@darkPrince : 편집 참조 - 이제 2.7.13에서도 작동합니다. –