蟒蛇烧瓶请求最终在500服务器上的错误蔚蓝

问题描述:

我有一个烧瓶webapp上运行azure,我开始编码的应用程序,一切工作完美,直到我决定提出一个请求,从YouTube的API获取一些信息。蟒蛇烧瓶请求最终在500服务器上的错误蔚蓝

下面的代码:

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提出请求,然后出现以下消息:

azure error

所以我决定检查日志,这是对他们有什么出现:

azure error 2 azure error 3

我刚开始这个周五瓶和蔚蓝的工作,我不知道接下来要做什么来解决这个问题。任何帮助或指示什么可以解决这个问题将不胜感激。

这是我的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来解决这个问题。欲了解更多信息,请参阅 https://urllib3.readthedocs.io/en/latest/advanced-usage.html#ssl-warnings

InsecurePlatformWarning:一个真正的SSLContext对象不可用。 这可以防止urllib3正确配置SSL,并可能导致 某些SSL连接失败。你可以升级到更新版本的 Python来解决这个问题。欲了解更多信息,请参阅 https://urllib3.readthedocs.io/en/latest/advanced-usage.html#ssl-warnings

InsecurePlatformWarning HTTPSConnectionPool(主机= 'content.googleapis.com',端口= 443):最大 重试网址为突破: /YouTube的/ V3 /搜索键= AIzaSyCxd3KGNNiZy-omyDH7U8Lr3zGQD6ZO448 &的channelID = UCvS6-K6Ydmb4gH-kim3AmjA &部分=片断,ID &为了=日期&的maxResults = 20 (由SSLError(SSLError(1引起的,“_ssl.c:499:错误:14090086:SSL 例程:SSL3_GET_SERVER_CERTIFICATE:证书验证失败'),))

+0

我对Azure或Flask不太熟悉,但是这是否回答您的问题? https://*.com/questions/38200782/azure-flask-http-error-500-0-internal-server-error –

+0

我确实看看他的问题,但它不得不做一些事实,他是使用烧瓶的会话管理器来处理认证,这不是我的情况。 – codeninja

+1

它必须是'requests.get(url).content.json()'引起异常。响应的“内容”是“字节”。如果你想获得json格式的响应,只需使用'requests.get(url).json()'。 – stamaimer

我不认为它与Azure有关。

我认为问题在于您对YouTube的请求引发异常。

Try/Catch阻断,并找出异常是什么:

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'} 

知道到底出了什么问题,请阅读youtube data api error documentation,并抓住他们,只要你喜欢。

UPDATE

看起来像你使用Python 2,它在默认情况下自带ssl模块不支持SNI。你有两个选择。首先,Python升级到Python 3或安装要求的安全版本:

pip install 'requests[security]' 

希望它能帮助!

+0

以json的形式返回异常并不能告诉我究竟会出现什么问题呢? – codeninja

+0

我已经更新了我的答案,请检查打印的内容 – codeninja

+0

@codeninja我没有看到你的变化 –

当你的链接,SSL Warning如下表示,

SNIMissingWarning

This happens on Python 2 versions older than 2.7.9. These older versions lack SNI support. This can cause servers to present a certificate that the client thinks is invalid. Follow the pyOpenSSL guide to resolve this warning.

我通过命令python -V捻控制台,它是Python 2.7.8上选中了Azure中的WebApp的Python2版本。因此,您可以尝试通过Kudu站点扩展(https://<your-webapp-name>.scm.azurewebsites.net/SiteExtensions/#gallery)安装更高版本的Python2,如下图所示,例如Python 2.7.12 x86

enter image description here

然后,它会在路径D:\home\Python27\安装,你需要以更新web.config文件Python的相关配置再次尝试烧瓶应用。

希望它有帮助。

+0

另一个问题,x86是默认的架构安装吧? – codeninja

+0

@codeninja当然,它是默认的,除非您在应用程序设置选项卡中启用了“64位”平台选项。 –