Python Requestsライブラリを使用してRESTサーバーに接続し、.pem証明書を使用して接続を確立するユーザーを認証し、データの収集、解析などを開始できます。 。私はEclipseや端子を介して私のプログラムを実行すると、私はこのエラーを取得:Python Requests 'Permission denied'しかしsudoで動作します。
[('system library', 'fopen', 'Permission denied'), ('BIO routines', 'FILE_CTRL', 'system lib'), ('SSL routines', 'SSL_CTX_use_certificate_file', 'system lib')]
しかし、私は「sudoの」として実行する場合 - 意図したとおりのリクエストライブラリー作品を、私はデータを取得することができています。残念なことに、 'sudo'として実行すると、デフォルトのPythonインタプリタがPython2のルートインタプリタであるという副作用があります。しかし、Anacondaには多くのライブラリ依存関係が必要です。コンテキストの場合
、ここで私は接続を確立するために使用しています関数です。
PEM_FILE = os.path.expanduser("path/to/pem/file.pem") #Path is to a folder in root level
def set_up_connection(self):
#URL's to request a connection with
rest_auth = 'https://www.restwebsite.com/get/data'
ip_address = self.get_ip_address()
body = json.dumps({'userid':'user', 'password':'pass', 'ip_address':ip_address})
try:
resp = self.session.post(rest_auth, data=body, cert=PEM_FILE, verify=False)
values = resp.json()
token = values['token']
except Exception as e:
print(e)
token = None
return token, ip_address
TLDRは、 'python rest_connector.py'を使用すると、エラーがレンダリングされます。そのコマンドをsudoとして実行すると動作します。
証明書のコンテキスト:.pem certの権限は600(rw -------)に設定されています。
私の問題をsudoとして実行しようとすると、ターミナルを起動し、ターミナルをルートとして実行するように設定したsudo -Eを実行し、デフォルトのインタープリタとしてAnacondaを使用しますが、ハンドシェークエラー:誰かが私はそれをこのように解決するのに役立つことができれば
[('SSL routines', 'ssl3_read_bytes', 'tlsv1 alert unknown ca'), ('SSL routines', 'ssl3_read_bytes', 'ssl handshake failure')]
は、それは素敵な一時的な修正だろうが、私はまだ、これはsudoをせずに実行できるようにする必要があります。
ありがとうございます。
誰が.pemファイルを所有していますか? – fhossfel
'〜/ path/to/pem/file.pem'ファイルの所有者を、そのスクリプトを実行するユーザーに変更できますか? – davejagoda
ルートがファイルを所有していました。私はちょうど 'sudo chown username file.pem'を使って所有者を自分自身に変更しようとしました。まだハンドシェイクエラーが発生しています。 –