Python Flask请求在Azure上以500服务器错误结束

Python Flask请求在Azure上以500服务器错误结束,python,azure,flask,Python,Azure,Flask,我有一个在Azure上运行的Flask web应用程序,我开始编写该应用程序,所有的工作都很完美,直到我决定请求从YouTube API获取一些信息 代码如下: import requests from flask_restful import Resource class GetChannelList(Resource): def get(self): url = "https://content.googleapis.com/youtube/v3/sear

我有一个在Azure上运行的Flask web应用程序,我开始编写该应用程序,所有的工作都很完美,直到我决定请求从YouTube API获取一些信息

代码如下:

import requests
from flask_restful import Resource

class GetChannelList(Resource):
    def get(self):
        url = "https://content.googleapis.com/youtube/v3/search?key=AIzaSyDHYcHfhnhIiuQUejcfkeorMHNQDL4Htvc&channelId=UCvS6-K6Ydmb4gH-kim3AmjA&part=snippet,id&order=date&maxResults=20"
        return requests.get(url).content.json()
在另一个Python文件中,我有:

from flask import Flask
from flask_restful import Api
from api.get_channel_list import GetChannelList
app = Flask(__name__)

api = Api(app)

api.add_resource(GetChannelList, "/api/get_channel_list")

import FlaskWebProject1.views
最后,在我的角度控制器上,我有:

$scope.GetChannelList = function(){
            $http.get('api/get_channel_list').then(function(data){
                $scope.data = data;
            });
            return $scope.data;
        }
一切正常,直到应用程序向YouTube发出请求,然后出现以下消息:

所以我决定检查日志,下面是日志上显示的内容:

本周五我刚开始使用Flask和Azure,我不知道下一步要做什么来解决这个问题。任何关于如何解决这一问题的帮助或指示都将不胜感激

这是我的web.config文件:

<?xml version="1.0"?>
<!-- Generated web.config for Microsoft Azure. Remove this comment to prevent
     modifications being overwritten when publishing the project.
-->
<configuration>
  <system.diagnostics>
    <trace>
      <listeners>
        <add type="Microsoft.WindowsAzure.Diagnostics.DiagnosticMonitorTraceListener, Microsoft.WindowsAzure.Diagnostics, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" name="AzureDiagnostics">
          <filter type="" />
        </add>
      </listeners>
    </trace>
  </system.diagnostics>
  <appSettings>
    <add key="WSGI_ALT_VIRTUALENV_HANDLER" value="FlaskWebProject1.app" />
    <add key="WSGI_ALT_VIRTUALENV_ACTIVATE_THIS" value="D:\home\site\wwwroot\env\Scripts\activate_this.py" />
    <add key="WSGI_HANDLER" value="ptvs_virtualenv_proxy.get_virtualenv_handler()" />
    <add key="PYTHONPATH" value="D:\home\site\wwwroot" />
  </appSettings>
  <system.web>
    <compilation debug="true" targetFramework="4.0" />
  </system.web>
  <system.webServer>
    <modules runAllManagedModulesForAllRequests="true" />
    <handlers>
      <add name="Python FastCGI" path="handler.fcgi" verb="*" modules="FastCgiModule" scriptProcessor="D:\Python27\python.exe|D:\Python27\Scripts\wfastcgi.py" resourceType="Unspecified" requireAccess="Script" />
    </handlers>
    <rewrite>
      <rules>
        <rule name="Static Files" stopProcessing="true">
          <match url="^/static/.*" ignoreCase="true" />
          <action type="Rewrite" url="^/FlaskWebProject1/static/.*" appendQueryString="true" />
        </rule>
        <rule name="Configure Python" stopProcessing="true">
          <match url="(.*)" ignoreCase="false" />
          <conditions>
          </conditions>
          <action type="Rewrite" url="handler.fcgi/{R:1}" appendQueryString="true" />
        </rule>
      </rules>
    </rewrite>
  </system.webServer>
</configuration>
编辑

产生以下错误:

SNIMissingWarning:已发出HTTPS请求,但SNI 受试者姓名指示扩展到TLS在该网站上不可用 站台这可能会导致服务器提供不正确的TLS 证书,这可能导致验证失败。您可以升级到 更新版本的Python解决了这个问题。有关详细信息,请参阅

不安全平台警告:真正的SSLContext对象不可用。 这会阻止urllib3正确配置SSL,并可能导致 某些SSL连接可能会失败。您可以升级到的更新版本 Python来解决这个问题。有关详细信息,请参阅

不安全平台警告 HTTPSConnectionPoolhost='content.googleapis.com',端口=443:Max 已超过url的重试次数: /youtube/v3/search?key=aizasycxd3kgnizy-myydh7u8lr3zgqd6zo448&channelId=UCvS6-K6Ydmb4gH-kim3AmjA&part=snippet,id&order=date&maxResults=20 由SSLErrorSSLError1“引起的。\u ssl.c:499:error:14090086:ssl 例程:SSL3\u获取\u服务器\u证书:证书验证失败'


我认为这与Azure无关

我认为问题在于你对YouTube的请求引发了一个例外

尝试/捕获该块并找出异常:

class GetChannelList(Resource):
def get(self):
    try:
        url = "https://content.googleapis.com/youtube/v3/search?key=AIzaSyDHYcHfhnhIiuQUejcfkeorMHNQDL4Htvc&channelId=UCvS6-K6Ydmb4gH-kim3AmjA&part=snippet,id&order=date&maxResults=20"
        return requests.get(url).content.json()
    except Exception as e:
        print(str(e))
        return {'message': 'Something went wrong'}
要想知道到底出了什么问题,请阅读文章,并根据自己的喜好抓住它们

更新:

看起来您正在使用Python2,默认情况下,它附带了不支持SNI的ssl模块。你有两个选择。首先,将python升级到python 3。或安装请求的安全版本:

pip install 'requests[security]'  
希望有帮助

作为您的链接,如下所述

SNIMissingWarning

这发生在早于2.7.9的Python 2版本上。这些旧版本缺少SNI支持。这可能会导致服务器提供客户端认为无效的证书。请按照pyOpenSSL指南解决此警告

我在Kudu控制台上通过命令python-V检查了AzureWebApps的Python2版本,即Python2.7.8。因此,您可以尝试通过Kudu站点扩展安装Python2的更高版本https://.scm.azurewebsites.net/SiteExtensions/gallery 如下图所示,如Python 2.7.12 x86

然后,它将安装在路径D:\home\Python27\,您需要在web.config文件中更新Python的相关配置,以便再次尝试flask应用程序


希望有帮助。

我对Azure或Flask不太熟悉,但这能回答你的问题吗?我确实查看了他的问题,但这与他使用flask的会话管理器处理身份验证这一事实有关,这不是我的情况。必须是requests.geturl.content.json导致异常。响应的内容是字节。如果您想获得响应的json格式,只需使用requests.geturl.json即可。@stamaimer这很有效!但是,它仍然会在azure上引发内部服务器错误,仅在本地工作。你的意思是requests.geturl.content.json不会在本地计算机上引发异常?以json形式返回的异常不会告诉我到底出了什么问题,是吗?应该在那里,顺便说一句,这是显示的本地错误,我假设他们在azure@Jahongir Rahmonovthanks上是一样的,尝试实现它,会让你知道有什么变化,谢谢!此外,我还尝试在angular上从同一个youtube url上运行$http.get,效果很好,问题出在python中,我已经连续两天绞尽脑汁来解决这个问题,但我还没有找到解决方案。你知道我能做些什么来解决这个问题吗?另一个问题,x86是默认安装的架构吗?@codennija当然,这是默认的,除非你在“应用程序设置”选项卡中启用了64位平台选项。