8

これに対する解決策を探し始めてから数日が経ちました。

リクエストを使用して、プロキシ経由で https リクエストを作成しようとしましたが、うまくいきませんでした。

これは私のより大きなプロジェクトに含まれていますが、すべてこれで完了します。

    import requests

    prox = 'xxx.xxx.xxx.xxx:xxx' # fill in valid proxy

    r = requests.get('https://ipdb.at', proxies={'http': prox,
                                                 'https': prox})

kward verify=False を試しましたが、同じエラーまたはそのバリエーションが引き続き発生します。

    Traceback (most recent call last):
      File "/Users/mg/Desktop/proxy_service.py", line 21, in <module>
        verify=False)
      File "/Library/Python/2.7/site-packages/requests/api.py", line 55, in get
        return request('get', url, **kwargs)
      File "/Library/Python/2.7/site-packages/requests/api.py", line 44, in request
        return session.request(method=method, url=url, **kwargs)
      File "/Library/Python/2.7/site-packages/requests/sessions.py", line 279, in request
        resp = self.send(prep, stream=stream, timeout=timeout, verify=verify, cert=cert, proxies=proxies)
      File "/Library/Python/2.7/site-packages/requests/sessions.py", line 374, in send
        r = adapter.send(request, **kwargs)
      File "/Library/Python/2.7/site-packages/requests/adapters.py", line 213, in send
        raise SSLError(e)
    requests.exceptions.SSLError: [Errno 1] _ssl.c:504: error:140770FC:SSL routines:SSL23_GET_SERVER_HELLO:unknown protocol
    [Finished in 20.4s with exit code 1]

私はリクエストとopensslの最新バージョンとpython用の2.7.3を使用しています。Mac Mountain Lion 10.8.2 と Windows 7 でもテストしました。

私はこれをグーグルで検索し、他の人が同様の問題を抱えているのを見ました。関連するプル リクエストがライブラリ リクエストと urllib3 で見つかりました。また、これが http 接続動詞の不適切な実装であるという情報も見ました。カスタム SSL プロトコルを使用するために、カスタム アダプター (正確には思い出せませんが、正しい用語だと思います) を使用するための修正を見つけました。それらをすべて試しましたが、何も役に立ちませんでした。

だから、私はより多くの情報を探しています。何が起こっているのか分かりますか、私はそれを修正できますか、など...

すべての助けを歓迎します。ありがとうございました。

PS: いくつかのプロキシを試しましたが、それらは問題ではないと確信しています。

4

2 に答える 2

16

これと同じ問題がありましたが、oauth2client (API に対して oauth2 を使用するための Google ライブラリ) を使用しようとしたときに発生しました。一日の試行錯誤(「実験」)の後、環境変数が次のように設定されていることがわかりました。

https_proxy=https://your-proxy:port

これを

https_proxy=http://your-proxy:port

私の問題を完全に修正しました。おそらくこれは、クライアントからプロキシへの最初のハンドシェイクが暗号化されていないことを意味しますが、その後は https が直接流れる必要があります。とにかく、会社のプロキシが https と通信するように構成されているとは思えません。

ただし、私のブラウザはすべて、以前の設定で正常に動作したことに注意してください。おそらく、彼らは https の使用に失敗した後、黙って HTTP 経由でプロキシ接続を確立しようとしたのでしょう。

グーグルは、https_proxy を両方の http アドレスまたは https アドレスに等しく設定する例を示しています。プロキシの設定方法に依存すると思います。

ブラウザー/OS 構成ポップアップの「すべてのプロトコルに使用」ボタンを使用すると、以前の設定を誤って使用しやすくなります。

ただし、それがあなたの問題かどうかはわかりません。あなたのコードは、http と https の両方にまったく同じプロキシ設定を既に使用していることを示唆しています。

ちなみに、これはすべてUbuntu 12.04.1でした。

于 2013-01-23T16:01:13.847 に答える
2

ここでの答えは 、TLSでリクエストを使用してもSNIサポートが提供されない私にとってはうまくいきました

3つの依存ライブラリをインストールし、2番目の回答にモンキーパッチのヒントを含めました

于 2014-01-15T23:48:19.317 に答える