1. 程式人生 > >https(ssl)連線之python實現

https(ssl)連線之python實現

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

原因是以下一段程式碼引起的:

?
1 2 import urllib2 urllib2.urlopen('https://xxxx.com')

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

?
1 urllib2.URLError:

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

?
1 2 import requests requests.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

果然報如下錯誤:

?
1 2 OpenSSL: error:140773E8:SSL routines:SSL23_GET_SERVER_HELLO:reason(1000)
無法建立 SSL 連線。

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

?
1 2 3 4 5 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程式碼了。

?
1 2 3

相關推薦

https(ssl)連線python實現

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

機器學習入門python實現圖片簡單分類

numbers org 路徑 圖片分類 jpg animal 入門 res windows 小任務:實現圖片分類 1.圖片素材 python批量壓縮jpg圖片: PIL庫 resize http://blog.csdn.net/u012234115/article/

常見排序算法python實現

uic 位置 cti gte https 最大值 ice 插入排序 快速   本文介紹了幾種常用的排序算法,包含冒泡排序,選擇排序,插入排序,歸並排序,快速排序,堆排序,本文涉及的代碼可以在https://github.com/lianyingteng/Programmin

選擇排序python實現

bsp index dsm col 選擇排序 pytho 一個數 pan lin def findsmallestindex(arr): smallnum = arr[0] smallindex = 0 # 尋找最小元素的位置 for i

逆向最大匹配演算法python實現

1.執行環境 python 3.6.4 2.思路 大致思路與正向相同,可參考我的上一篇部落格。 3.程式碼實現 import codecs #獲得分詞字典,儲存為字典形式 f1 = codecs.open('./corpus/WordList.txt', 'r', encodi

正向最大匹配演算法實現python實現

1.python 版本:python 3.6.4 2.思路: s1.匯入分詞詞典,儲存為字典形式dic,匯入停用詞詞典stop_words,儲存為字典形式,需要分詞的文字檔案cutTest.txt,儲存為字串chars s2.遍歷分詞詞典,找出最長的詞,長度為max_chars s3

Find Pivot IndexPython實現

def solution01(self, nums): startTime = time.time() # 求當前時間 index = -1 for i in range(0, len(nums)): sum_left = 0

“毛星雲OpenCV3程式設計入門python實現”第三篇讀取視訊+呼叫攝像頭

1.6.1讀取視訊+呼叫攝像頭 # -*- coding: gbk -*- __author__ = 'sunzhilong' import cv2 #讀取視訊,以幀顯示 cap = cv2.VideoCapture("E:/Study/python/Open

“毛星雲OpenCV3程式設計入門python實現”第六篇基本圖形繪製

4.3基本圖形繪製 python程式碼: # -*- coding: utf-8 -*- __author__ = 'sunzhilong' import cv2 import numpy as np image = np.zeros((600,600,3

“毛星雲OpenCV3程式設計入門python實現”第七篇影象拆分、合併

5.3影象拆分、合併 python程式碼: # -*- coding: utf-8 -*- import cv2 import numpy as np srcImage = cv2.imread("E:/Study/python/OpenCV_study/i

“毛星雲OpenCV3程式設計入門python實現”第八篇亮度、對比度

5.4亮度、對比度 python程式碼: # -*- coding: utf-8 -*- import cv2 import numpy as np gcontrastvalue = 80 # 對比度 gbrightvalue = 80

【分類】KNN分類演算法Python實現

KNN稱為K最近鄰。對於待分類資料,它先計算出與其最相近的K個的樣本,然後判斷這K個樣本中最多的類標籤,並將待分類資料標記為這個最多的類標籤。 python樣例程式碼: import numpy as np from sklearn.neighbors import KN

資料結構python實現雙端佇列

雙端佇列deque 雙端佇列(deque,全名double-ended queue),是一種具有佇列和棧的性質的資料結構。 雙端佇列中的元素可以從兩端彈出,其限定插入和刪除操作在表的兩端進行。雙端佇列可以在佇列任意一端入隊和出隊。 程式碼實現 """雙端

資料結構python實現冒泡演算法(bubblesort)

1.氣泡排序思想 比較相鄰的元素。如果第一個比第二個大(升序),就交換他們兩個。 對每一對相鄰元素作同樣的工作,從開始第一對到結尾的最後一對。這步做完後,最後的元素會是最大的數。 針對所有的元素重複以上的步驟,除了最後一個。 持續每次對越來越少的元素重複上面的

第1章-資料探索(2)-資料預處理Python實現

簡介 Python中,在資料處理這方面最流行的包應當是屬於Pandas了。Pandas與Scipy一樣,都是基於NumPy這個包開發出來的,所以使用時,都需要引用Numpy。Pandas中的DataFrame與R語言中的資料框的設計理念基本是一致的。不光如此,除了是DataFrame資料

樸素貝葉斯演算法python實現 統計學習方法例4.2實戰

 本人在自學李航老師的統計學習方法,在學習樸素貝葉斯章節時,其中概念非常好理解,但是準備想把課本中的例題實戰一下時卻犯了難,有點無從下手的感覺,主要是因為怎麼去合理的去寫,提高程式碼的適應性以及重複利用率。  在網上找了蠻多部落格,大部分都是是判斷情感詞等,其中有篇部落

稀疏矩陣python實現

工程實踐中,多數情況下,大矩陣一般都為稀疏矩陣,所以如何處理稀疏矩陣在實際中就非常重要。本文以python裡中的實現為例,首先來探討一下稀疏矩陣是如何儲存表示的。 1.sparse模組初探 python中scipy模組中,有一個模組叫sparse模組,就

23種設計模式python實現--visitor模式

這個模式涉及到雙分派,一直沒有好好理解,加上前幾天參加面試把最後一個設計模式擱了下來,這次重新看設計模式好好理解了一下,在C++中關於雙分派可以參考http://my.oschina.net/coolwater/blog/27676,不過他舉的例子有點複雜,簡單一點就是:

二叉樹的深度[劍指offer]python實現

題目描述 輸入一棵二叉樹,求該樹的深度。從根結點到葉結點依次經過的結點(含根、葉結點)形成樹的一條路徑,最長路徑的長度為樹的深度。 題目連結 -*- coding:utf-8 -*- # clas

狄克斯特拉演算法Python實現(個人獨創)易於理解和擴充套件。

狄克斯特拉演算法的基礎關係模型如下: 它解決的是從起點到終點的最佳路線問題。 如果把上圖的數字代表耗時,那就是要找到耗時最短的路徑。 由於本人較懶,先將原始碼給出來,之後有時間再解釋程式碼的意思。 下面程式碼針對的關係模型如下: # 資料關係模型用字典巢狀字