導航:首頁 > 編程語言 > pythonsslimport

pythonsslimport

發布時間:2022-08-19 04:54:12

python發送https提示error1407742e:ssl routines:ssl23_get_server_hello:tlsv1 alert protocol version

這似乎是一個SSL的bug。搜到一個解決方案,把這段代碼放到程序開頭:

importssl
fromfunctoolsimportwraps
defsslwrap(func):
@wraps(func)
defbar(*args,**kw):
kw['ssl_version']=ssl.PROTOCOL_TLSv1
returnfunc(*args,**kw)
returnbar
ssl.wrap_socket=sslwrap(ssl.wrap_socket)

然後再用requests試試。

❷ python requests請求ssl 加密 提示[SSL: CA_MD_TOO_WEAK] ca md too weak (_ssl.c:4024)')))

伺服器環境中的加密套件不支持這種加密方式。建議您升級一下加密套件版本到最新重新配置SSL。

❸ 如何實現python介面,的https

今天寫代碼時碰到一個問題,花了幾個小時的時間google,基本上把google搜索的前幾頁內容都一一看了下,問題最終是解決了,不過過程挺曲折的,所以把這個過程記下來以便以後參考之。
原因是以下一段代碼引起的:
?

12

import urllib2urllib2.urlopen('https://xxxx.com')

本來這段代碼很簡單的,就是請求一個https的連接,可是報以下錯誤:
?

1

urllib2.URLError:

第一反應是https證書問題產生的,如是以'python ssl' 為關鍵字google後,看到大家都在用'requests'這個python組件做http請求客戶端,就像java裡面的httpclient組件一樣,如果安裝完request包後,改成如下代碼:
?

12

import requestsrequests.get('https://xxx.com')

還是報以下錯誤:
?

1

requests.exceptions.SSLError:
[Errno 1] _ssl.c:504: error:140773E8:SSL routines:SSL23_GET_SERVER_HELLO:reason(1000)

可以看出來,用requests和urllib2報的錯誤信息是一樣,可見它們都是基於相同的底層api操作的,比如基於TLS的socket連接。到這里的時候我懷疑這個問題不是python代碼寫的有問題,可能是操作系統級別的設置錯了。如下直接在shell客戶端運行如下測試腳本:
?

1

wget
https://xxx.com

果然報如下錯誤:
?

12

OpenSSL:
error:140773E8:SSL routines:SSL23_GET_SERVER_HELLO:reason(1000)無法建立
SSL 連接。

到這里我懷疑是openssl安裝有問題,更新到最新版本後還是一樣,然後在瀏覽器里訪問是可以的,所以應該不是openssl有問題。繼續google.......,就發現有人也遇到過這種問題,說是連接SSL伺服器時SSL的版本不對,如是用如下代碼測試不同的SSL版本,看是不是這個問題:
?

12345

curl
-1 https://xxx.com curl
-2 https://xxx.com curl
-3 https://xxx.com

分別用上面的三句腳本去測試連接情況,發現第三種可以連接正常(-1,2,3,數字分別代碼tlsv1,sslv2,sslv3三個不同的SSL版本)。說明這個https連接所在的伺服器是基於SSLV3版本的。找到的問題,就很容易知道怎麼改寫python代碼了。
?

123456789

class MyAdapter(HTTPAdapter): def init_poolmanager(self,
connections, maxsize): self.poolmanager= PoolManager(num_pools=connections, maxsize=maxsize, ssl_version=ssl.PROTOCOL_SSLv3) s= requests.Session()s.mount('https://',
MyAdapter())#所有的https連接都用ssl.PROTOCOL_SSLV3去連接s.get('https://xxx.com')

urllib2實現:
?#
custom HTTPS opener, banner's oracle 10g server supports SSLv3 onlyimport httplib,
ssl, urllib2, socketclass HTTPSConnectionV3(httplib.HTTPSConnection): def __init__(self,*args,**kwargs): httplib.HTTPSConnection.__init__(self,*args,**kwargs) def connect(self): sock= socket.create_connection((self.host,self.port),self.timeout) if self._tunnel_host: self.sock= sock self._tunnel() try: self.sock= ssl.wrap_socket(sock,self.key_file,self.cert_file,
ssl_version=ssl.PROTOCOL_SSLv3) except ssl.SSLError,
e: print("Trying
SSLv3.") self.sock= ssl.wrap_socket(sock,self.key_file,self.cert_file,
ssl_version=ssl.PROTOCOL_SSLv23) class HTTPSHandlerV3(urllib2.HTTPSHandler): def https_open(self,
req): return self.do_open(HTTPSConnectionV3,
req)#
install openerurllib2.install_opener(urllib2.build_opener(HTTPSHandlerV3())) if __name__== "__main__": r= urllib2.urlopen("htANPROD1/bwskfcls.P_GetCrse") print(r.read())

可以看到這兩種方案的原理都是一樣,就是自定義連接處理器,改變連接時ssl的版本號。

❹ mac linux python3.5 import ssl問題

應該是在安裝包里,就是tar解壓出來的那個目錄里

❺ 怎麼解決使用python的requests獲得網頁時出現sslEOFError錯誤

❻ python3 代碼怎樣關閉url與ssl屬性校驗

importurllib.request
importssl

url="httpsurl"
header=headers={
"User-Agent":"Mozilla/5.0(Macintosh;IntelMacOSX10_7_0)AppleWebKit/535.11(KHTML,likeGecko)Chrome/17.0.963.56Safari/535.11"
}

request=urllib.request.Request(url,headers=header)
context=ssl._create_unverified_context()#忽略ssl證書驗證
res=urllib.request.urlopen(request,context=context)
print(res.read().decode("utf8"))

❼ 如何支持自定義安裝的高版本openssl庫

1. Python官網下載源碼包(version 2.7.8)並解壓

2. 通過configure配置Makefile參數
假定先前已在/home/slvher/tools/openssl-1.0.1j路徑下成功安裝好高版本openssl,那麼,可以通過下面的環境變數來設置gcc的編譯/鏈接參數:
export LDFLAGS="-lssl -lcrypto -Wl,-rpath=/home/slvher/tools/openssl-1.0.1j/lib/" export CPPFLAGS="-I/home/slvher/tools/openssl-1.0.1j/include"
然後運行configure工具:
./configure --prefix=/home/slvher/tools/Python-2.7.8
configure運行完後,會生成Makefile,check無誤後,執行make && make install就能完成Python安裝。
3. 驗證Python支持的ssl版本
Python安裝成功且其bin路徑加入PATH環境變數後,可通過下面的命令來驗證是否正確支持高版本的openssl庫:

python -c "import ssl; print ssl.OPENSSL_VERSION"
例如我機器上的輸出結果如下:
OpenSSL 1.0.1j 15 Oct 2014

閱讀全文

與pythonsslimport相關的資料

熱點內容
隨車拍app綁定什麼設備 瀏覽:895
方維團購系統源碼 瀏覽:988
linux反彈shell 瀏覽:152
列印機介面加密狗還能用嗎 瀏覽:299
二板股票源碼 瀏覽:446
度人經pdf 瀏覽:902
怎麼配置android遠程伺服器地址 瀏覽:960
java程序員看哪些書 瀏覽:943
什麼app可以免費和外國人聊天 瀏覽:797
pdf手寫筆 瀏覽:182
別永遠傷在童年pdf 瀏覽:990
愛上北斗星男友在哪個app上看 瀏覽:421
主力散戶派發源碼 瀏覽:671
linux如何修復伺服器時間 瀏覽:61
榮縣優途網約車app叫什麼 瀏覽:479
百姓網app截圖是什麼意思 瀏覽:229
php如何嵌入html 瀏覽:817
解壓專家怎麼傳輸 瀏覽:745
如何共享伺服器的網路連接 瀏覽:136
程序員簡易表白代碼 瀏覽:170