#python #ssl #visual-studio-code #azure-functions
#python #ssl #visual-studio-code #azure-функции
Вопрос:
Я создал функцию Azure — HTTP-триггер в VS Code, но я столкнулся с ошибкой, связанной с SSL. В качестве резюме я хотел бы, чтобы функция считывала файл csv из одного контейнера для хранения больших двоичных объектов (работает), а затем генерировала другой файл .txt и загружала его в другой контейнер для хранения больших двоичных объектов (похоже, эта часть генерирует ошибку ssl). Похоже, не удается найти корень проблемы, у кого-нибудь есть идея о том, как к ней подойти?
Код Python:
import pandas as pd
from datetime import datetime, timedelta
import logging
import azure.functions as func
from azure.storage.blob import BlobServiceClient, generate_container_sas, ContainerSasPermissions, generate_blob_sas, BlobSasPermissions, ContainerClient
from azure.core.exceptions import HttpResponseError, ResourceExistsError
import time
import os
import uuid
# using generate_container_sas
def get_img_url_with_container_sas_token(account_name,container_name,account_key):
container_sas_token = generate_container_sas(
account_name=account_name,
container_name=container_name,
account_key=account_key,
permission=ContainerSasPermissions(read=True),
expiry=datetime.utcnow() timedelta(hours=1)
)
return container_sas_token
def main(req: func.HttpRequest) -> func.HttpResponse:
logging.info('Python HTTP trigger function processed a request.')
name = "xxxxx"
key = "xxxxx"
raw_container = "raw"
blob_name = 'employee.csv'
gen_token = get_img_url_with_container_sas_token(name,raw_container,key)
INPUTSTORAGEACCOUNTURLSAS = f"https://{name}.blob.core.windows.net/{raw_container}/{blob_name}?{gen_token}"
#df = pd.read_csv(INPUTSTORAGEACCOUNTURLSAS,delimiter=',')
connect_str ='xxxxx'
# Create a file in local data directory to upload and download
local_file_name = "quickstart" str(uuid.uuid4()) ".txt"
upload_file_path = "xxxxx" local_file_name
# Write text to the file
file = open(upload_file_path, 'w')
file.write("Hello, World!")
file.close()
container_name = 'proccessed'
# Create a blob client using the local file name as the name for the blob
blob_service_client = BlobServiceClient.from_connection_string(connect_str)
blob_client = blob_service_client.get_blob_client(container=container_name, blob=local_file_name)
print("nUploading to Azure Storage as blob:nt" local_file_name)
# Upload the created file
with open(upload_file_path, "rb") as data:
#print(data)
blob_client.upload_blob(data)
name = req.params.get('name')
if not name:
try:
req_body = req.get_json()
except ValueError:
pass
else:
name = req_body.get('name')
if name:
return func.HttpResponse(f"Hello, {name}. This HTTP triggered function executed successfully.")
else:
return func.HttpResponse(
"This HTTP triggered function executed successfully. Pass a name in the query string or in the request body for a personalized response.",
status_code=200
)
Ошибка привела:
Executed 'Functions.ecr_xml_to_dl' (Failed, Id=7190b60c-4f2c-4c14-ad3c-b76735405953, Duration=96214ms)
[2020-12-07T12:27:42.443Z] System.Private.CoreLib: Exception while executing function: Functions.ecr_xml_to_dl. System.Private.CoreLib: Result: Failure
Exception: ServiceRequestError: [SSL: UNKNOWN_PROTOCOL] unknown protocol (_ssl.c:852)
Stack: File "C:Program FilesMicrosoftAzure Functions Core Toolsworkerspython3.6/WINDOWS/X64azure_functions_workerdispatcher.py", line 349, in _handle__invocation_request
self.__run_sync_func, invocation_id, fi.func, args)
File "C:UsersUSERAppDataLocalProgramsPythonPython36libconcurrentfuturesthread.py", line 56, in run
result = self.fn(*self.args, **self.kwargs)
File "C:Program FilesMicrosoftAzure Functions Core Toolsworkerspython3.6/WINDOWS/X64azure_functions_workerdispatcher.py", line 511, in __run_sync_func
return func(**params)
File "C:UsersUSERDocumentsWorkCodingAzure_Test_Functionecr_xml_to_dl__init__.py", line 58, in main
blob_client.upload_blob(data)
File "C:UsersUSERAppDataLocalProgramsPythonPython36libsite-packagesazurecoretracingdecorator.py", line 83, in wrapper_use_tracer
return func(*args, **kwargs)
File "C:UsersUSERAppDataLocalProgramsPythonPython36libsite-packagesazurestorageblob_blob_client.py", line 539, in upload_blob
return upload_block_blob(**options)
File "C:UsersUSERAppDataLocalProgramsPythonPython36libsite-packagesazurestorageblob_upload_helpers.py", line 106, in upload_block_blob
**kwargs)
File "C:UsersUSERAppDataLocalProgramsPythonPython36libsite-packagesazurestorageblob_generatedoperations_block_blob_operations.py", line 217, in upload
pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
File "C:UsersUSERAppDataLocalProgramsPythonPython36libsite-packagesazurecorepipeline_base.py", line 211, in run
return first_node.send(pipeline_request) # type: ignore
File "C:UsersUSERAppDataLocalProgramsPythonPython36libsite-packagesazurecorepipeline_base.py", line 71, in send
response = self.next.send(request)
File "C:UsersUSERAppDataLocalProgramsPythonPython36libsite-packagesazurecorepipeline_base.py", line 71, in send
response = self.next.send(request)
File "C:UsersUSERAppDataLocalProgramsPythonPython36libsite-packagesazurecorepipeline_base.py", line 71, in send
response = self.next.send(request)
[Previous line repeated 2 more times]
File "C:UsersUSERAppDataLocalProgramsPythonPython36libsite-packagesazurecorepipelinepolicies_redirect.py", line 157, in send
response = self.next.send(request)
File "C:UsersUSERAppDataLocalProgramsPythonPython36libsite-packagesazurecorepipeline_base.py", line 71, in send
response = self.next.send(request)
File "C:UsersUSERAppDataLocalProgramsPythonPython36libsite-packagesazurestorageblob_sharedpolicies.py", line 515, in send
raise err
File "C:UsersUSERAppDataLocalProgramsPythonPython36libsite-packagesazurestorageblob_sharedpolicies.py", line 489, in send
response = self.next.send(request)
File "C:UsersUSERAppDataLocalProgramsPythonPython36libsite-packagesazurecorepipeline_base.py", line 71, in send
response = self.next.send(request)
File "C:UsersUSERAppDataLocalProgramsPythonPython36libsite-packagesazurecorepipeline_base.py", line 71, in send
response = self.next.send(request)
File "C:UsersUSERAppDataLocalProgramsPythonPython36libsite-packagesazurecorepipeline_base.py", line 71, in send
response = self.next.send(request)
[Previous line repeated 1 more time]
File "C:UsersUSERAppDataLocalProgramsPythonPython36libsite-packagesazurestorageblob_sharedpolicies.py", line 290, in send
response = self.next.send(request)
File "C:UsersUSERAppDataLocalProgramsPythonPython36libsite-packagesazurecorepipeline_base.py", line 71, in send
response = self.next.send(request)
File "C:UsersUSERAppDataLocalProgramsPythonPython36libsite-packagesazurecorepipeline_base.py", line 71, in send
response = self.next.send(request)
File "C:UsersUSERAppDataLocalProgramsPythonPython36libsite-packagesazurecorepipeline_base.py", line 103, in send
self._sender.send(request.http_request, **request.context.options),
File "C:UsersUSERAppDataLocalProgramsPythonPython36libsite-packagesazurestorageblob_sharedbase_client.py", line 319, in send
return self._transport.send(request, **kwargs)
File "C:UsersUSERAppDataLocalProgramsPythonPython36libsite-packagesazurecorepipelinetransport_requests_basic.py", line 285, in send
raise error
Комментарии:
1. Могу ли я узнать , в какой строке кода отображается сообщение об ошибке?
2. Если в сообщении об ошибке не отображается номер строки, пожалуйста, добавьте
logging.info("111")
,logging.info("222")
… между каждой строкой, чтобы проверить, какая строка кода вызывает ошибку.3. Привет, Шен, я обновил вопрос с полным сообщением об ошибке, спасибо!
4. Привет, это
upload_file_path
похожеC:\xxx\xxx\filename.txt
? Илиupload_file_path
включаетhttp/https
в него?5. @HuryShen путь к upload_file_path выглядит так C:\xxx\xxx\filename.txt
Ответ №1:
Согласно некоторым тестам, кажется, что ваш код не представляет проблем, код отлично работает на моей стороне.
Что касается сообщения об ошибке, которое вы предоставили, то, похоже, оно было вызвано вашим подключением к Интернету. Если ваш компьютер использует прокси-сервер для подключения к Интернету, он может показать аналогичную проблему. Поэтому, пожалуйста, проверьте, использует ли ваша сеть какой-либо прокси-сервер или открыт ли fiddler на вашем компьютере. И, пожалуйста, замените другой компьютер с общедоступным Интернетом для тестирования с тем же кодом.
Комментарии:
1. Привет, вы правы, проблема была вызвана прокси-сервером. Теперь я решил ее, спасибо!
2. @PyRar Отлично, не могли бы вы отметить мой ответ как «принятый», спасибо.