2017-07-08 11 views
1

私はPythonリクエストパッケージをSSL経由で接続しようとしましたが、私は以下のコードを使用しました。Python 2.7.13リクエストを使用したssl接続

resp = requests.get(addr , auth=HttpNtlmAuth(userFile[unum],passFile[pnum]) , headers = {'User-Agent':'Mozilla/4.01 (compatible; MSIE 6.0; Windows NT 5.1)'} , verify = False) 

ただし、以下のエラーが発生するたびに発生します。

("bad handshake: SysCallError(-1, 'Unexpected EOF')",) 

UPDATE 1:

私は、ホスト証明書をダンプし、c.certとコードの下で使用することを保存します。

resp = requests.get(addr , auth=HttpNtlmAuth(userFile[unum],passFile[pnum]) , headers = {'User-Agent':'Mozilla/4.01 (compatible; MSIE 6.0; Windows NT 5.1)'} , cert = '/home/user/Desktop/c.cert' , verify = '/home/user/Desktop/c.cert') 

と新しいエラーです。

[('PEM routines', 'PEM_read_bio', 'no start line'), ('SSL routines', 'SSL_CTX_use_PrivateKey_file', 'PEM lib')] 

UPDATE 2:

ここでは、げっぷSuiteは捕獲するものです。

(まず、セッションの作成):

GET /PATH HTTP/1.1 
Host: HOST 
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Firefox/52.0 
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 
Accept-Language: en-US,en;q=0.5 
Cookie: ASPSESSIONIDCQCTCTCQ=EPEHGDDAKOINODAJJKCELEOK 
DNT: 1 
Connection: close 
Upgrade-Insecure-Requests: 1 
Cache-Control: max-age=0 

(第二に、使用時の資格情報):

GET /PATH HTTP/1.1 
Host: HOST 
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Firefox/52.0 
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 
Accept-Language: en-US,en;q=0.5 
Cookie: ASPSESSIONIDCQCTCTCQ=EPEHGDDAKOINODAJJKCELEOK 
DNT: 1 
Upgrade-Insecure-Requests: 1 
Cache-Control: max-age=0 
Authorization: NTLM TlRMTVNTUAABAAAAB4IIAAAAAAAAAAAAAAAAAAAAAAA= 
Connection: close 

(第三に、資格情報が間違っていた)

GET /PATH HTTP/1.1 
Host: HOST 
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Firefox/52.0 
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 
Accept-Language: en-US,en;q=0.5 
Cookie: ASPSESSIONIDCQCTCTCQ=EPEHGDDAKOINODAJJKCELEOK 
DNT: 1 
Upgrade-Insecure-Requests: 1 
Cache-Control: max-age=0 
Authorization: NTLM TlRMTVNTUAADAAAAGAAYAGAAAACIAIgAeAAAAAAAAABAAAAACgAKAEAAAAAWABYASgAAAAAAAAAAAAAABYIIAGEAZABtAGkAbgBXAE8AUgBLAFMAVABBAFQASQBPAE4Ao8+kG6lMZcLmQys5IUkpayq+W1VFZPkjUQjxBhzugt88vU6RR3wahQEBAAAAAAAAgPonWPz30gGr58MfeUgvgQAAAAACABIAVwBFAEIAUwBFAFIAVgBFAFIAAQASAFcARQBCAFMARQBSAFYARQBSAAQAEgBXAEUAQgBTAEUAUgBWAEUAUgADABIAVwBFAEIAUwBFAFIAVgBFAFIAAAAAAA== 
Connection: close 

URLを使用してHTTPSを使用しないと、カスタムエラー以下のページが表示されます

不正リクエスト(無効なホスト名)

+2

サーバーは接続を閉じました。これには、クライアント証明書が見つからない、互換性のない暗号またはTLSプロトコルのバージョンなど、多くの理由があります。ブラウザのような別のクライアントを使用する場合は接続が正しく行われていることを確認し、ブラウザに必要な情報(クライアント証明書など)をスクリプトに提供していることを確認してください。最近のバージョンのOpenSSLを使用していることを確認してください。これはTLS 1.2のみをサポートしているため、1.0.1以上です。これについてssl.OPENSSL_VERSIONを確認してください。 –

+0

opensslはすでに最新バージョン(1.1.0f-3)です。私がブラウザを使って接続すると、それは動作します – saodark

+2

そして、私は、ブラウザとサーバの間の接続が成功したことと、pythonクライアントとサーバの間の接続に失敗したパケットの両方をキャプチャし、これらを比較することを推奨します。プロトコルバージョン。分析に助けが必要な場合は、キャプチャをcloudshark.orgにアップロードすることができます。 –

答えて

-1

SSLコンテキストを作成してリクエストに渡す必要があるかもしれません。

import ssl 
context = ssl.SSLContext(ssl.PROTOCOL_TLSv1_2) #if you need TLS v1.2 

このコンテキストのvarを要求メソッドに渡します。オプションのキーワード引数の場合は、名前はcontextです。だから、呼び出しは次のようになります:それはあなたが送ってきたものを好きではないので、

resp = requests.get(addr, ...., context=context)

+1

に再度問題がありました。 "request()は予期しないキーワード引数 'context'を持っています" – saodark

関連する問題