Передача аргументов в функцию Python Azure через URL

Я пытаюсь заставить пример hello world работать на python с помощью функций Azure. Базовая функция пытается получить имя как ввод через URL-адрес, а затем отвечает "Hello Name". Оказывается, что шаблон-пример, который доступен через портал Azure, не работает "из коробки". Базовый пример выглядит так:

import os
import json

postreqdata = json.loads(open(os.environ['req']).read())
response = open(os.environ['res'], 'w')
response.write("hello world from "+postreqdata['name'])
response.close()

Две переменные окружения req и res являются путями к временным файлам, хранящим ввод и вывод из функции как json. Идея состоит в том, что входные данные, переданные через URL, должны быть доступны в словаре, возвращаемом json.loads(). Единственная дилемма в том, что файл, расположенный в os.environ['req'], пуст, независимо от того, что я делаю.

os.path.isfile(os.environ['req'])
# Returns True so the file is located at:
# D:\local\Temp\Functions\Binding\79fcec12-baf3-470e-87c3-113f64ffcef0\req
# during the execution

Я также попробовал пример JavaScript Hello World, который работает прямо из коробки с функциями Azure. Мой скрипт на Python работает нормально при выполнении внутри Azure-портала, но не запускается при запуске из веб-браузера.

Функция работает на Python 2.7.13 с расширением &name=MyName по адресу https.

Я считаю, что ошибка не в самом скрипте, а где-то спрятана в магистрали. Кто-нибудь пробовал то же самое?

1 ответ

Образец по умолчанию, на который вы ссылаетесь (источник здесь), принимает запрос HTTP POST и требует, чтобы вашим телом запроса была полезная нагрузка JSON со свойством name.

Чтобы получить доступ к параметрам запроса URL, мы делаем их доступными вам как отдельные переменные среды. Например, если вы отправляете параметр запроса "foo", вы можете получить к нему доступ через os.environ['req_query_foo'],

I was also having this issue. The example at this link says to test it with a url of type

https://<app_name>.azurewebsites.net/api/MyHttpTrigger?name=<yourname>

When testing locally this format works, but I finally figured out that when testing once deployed that the link it gives in the command line of type

https://<appname>.azurewebsites.net/api/MyHttpTrigger?code=<randomcode>/<randomcode>==

is what you really need. Add on your &name=<yourName> to this link instead. Mine worked for

https://<appname>.azurewebsites.net/api/MyHttpTrigger?code=<randomcode>/<randomcode>==&name=<yourName>

Not sure if you have already tried this since your question wasn't entirely clear, but hope this helps.

Другие вопросы по тегам