簡體   English   中英

無法使用來自 python 的代理下載 azure blob

[英]Can´t download azure blob using proxies from python

我正在嘗試從使用代理的服務器下載 azure blob。 現在,我的代碼在我的本地完美運行(不需要使用代理,因為它不需要)但是當我嘗試從我需要使用代理的服務器運行它時,即使我遵循了 azure 文檔,它也不起作用. 我收到以下錯誤:

azure.core.exceptions.ClientAuthenticationError: Authentication failed: <urllib3.connection.HTTPSConnection object at 0x7fa5b831f760>: Failed to establish a new connection: [Errno -2] Name or service not known

這是代碼:

from azure.identity import ClientSecretCredential
from azure.storage.blob import BlobServiceClient 
credential = ClientSecretCredential(self.tenant_id, self.client_id, self.client_secret)
proxy = {"http": proxy_value, "https": proxy_value}
blob_service_client_instance = BlobServiceClient(
    account_url=storage_account_url, credential=credential, proxies=proxy, connection_verify=False
)
blob_client_instance = blob_service_client_instance.get_blob_client(
    container_name, blob_name, snapshot=None
)
blob_data = blob_client_instance.download_blob()

我 100% 確定所有值都是正確的,因為我已經完成了其他有效的不同測試。

提前致謝!!

我在我的環境中嘗試並得到以下結果:

最初我在我的環境中嘗試並出現錯誤,

(由 ProxyError('無法連接到代理。', NewConnectionError('<requests.packages.urllib3.connection.HTTPConnection object at 0x04755510>: Failed to establish a new connection: [Errno11001] getaddrinfo failed',)))

發生錯誤是因為您的代理密碼可能包含一個@ symbol ,這導致您的 URL 解析變得混亂。 在傳遞密碼之前,您需要對密碼進行URL encode (即,通過urllib.quote) ,否則它會變得非常混亂。

您可以參考此文檔在 azure cli 中設置變量。 我嘗試使用帶有以下urllib.parse代碼的 urllib.parse 下載並使用代理成功讀取文件內容。

from azure.identity import ClientSecretCredential
from azure.storage.blob import BlobServiceClient
import json
import os
import requests
from urllib.parse import quote


username = quote('type in username')  
password = quote(' type in password')  
proxy = 'type in proxy name or ip'  
proxy_port = '8080'

proxy_https = 'https://' + username + ':' + password + '@' + proxy + ':' + proxy_port

proxies={ 'https': proxy_https}
tenant_id="<tenant id>"
client_id="<client id>"
client_secret="<client secret>"

credential = ClientSecretCredential(tenant_id,client_id,client_secret)
storage_url="https://venkat12.blob.core.windows.net"

container_name="test"
blob_name="file.json"
blob_service_client_instance = BlobServiceClient(account_url=storage_url,proxy=proxies,credential=credential,connection_verify=True)
blob_client_instance = blob_service_client_instance.get_blob_client(
    container_name,blob_name, snapshot=None
)
blob_data = blob_client_instance.download_blob().readall()
raw=json.loads(blob_data)
print(raw)

安慰:在此處輸入圖像描述

參考:無法讓代理與 https 一起工作,而 http 僅與 auth 一起工作,不像 Docu 描述的 · Issue #3990 · psf/requests (github.com) by eisbaer9。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM