2017-02-07 44 views
0

我一直努力讓瓶應用了我的IIS服務器上運行,並已取得了一些進展得益於以下鏈接:使用Flask |在IIS上的Python請求連接錯誤

http://netdot.co/2015/03/09/flask-on-iis

隨着內容而言,我運行到摸不到頭腦當我在IIS上部署時嘗試使用「requests」python模塊時。那就是,我得到一個合適的< 200>響應請求的JSON數據時,如果我通過終端

> python app.py啓動的應用程序 - 當我在本地啓動它的應用程序工作正常。

本質上,應用程序通過API從我的存儲庫請求JSON數據。 Stash的API需要用戶驗證這個獲取請求。請求模塊使它很容易做...我儘可能避免原始HTML(網絡noob ...> <;)。

我在Python收到以下錯誤異常時,部署在IIS和不知道爲什麼:

ConnectionError: ('Connection aborted.', error(13, 'Permission denied')) 

您可以參考下面的整個代碼(保密的東西略)。 基本上,我有一個login.html頁面,用戶憑據。 然後,我用這些憑證發送GET請求

try: 
    reqLib = requests.get('https://stash/rest/api/latest/projects/PLAN/repos/sqlquerylibrary/files?at=refs%2Fheads%2Fmaster&limit=100000', auth=(usr, pwd), verify=False) 
except Exception as e: 
    return str(e) 

整個應用程序:

import requests 
from flask import Flask, render_template, redirect, url_for, request, send_from_directory 
from flask_login import LoginManager, UserMixin, login_required, login_user 
import sys 
import os 

app = Flask(__name__) 
login_manager = LoginManager() 
login_manager.init_app(app) 

user = '' 
reqLib = '' 

#Add headers to force no-cache 
@app.after_request 
def add_header(r): 
    r.headers["Cache-Control"] = "no-cache, no-store, must-revalidate" 
    r.headers["Pragma"] = "no-cache" 
    r.headers["Expires"] = "0" 
    r.headers["Cache-Control"] = "public, max-age=0" 
    return r 

#post-processing/loading screen -- you can ignore this route 
@app.route("/scripting") 
@login_required 
def script(): 
    scrape() 
    return redirect(url_for('display')) 

#Page displays AFTER a successful <200> response 
@app.route("/sqlLibraryDisplay",methods=["GET"]) 
@login_required 
def display(): 
    return send_from_directory("static","index.html") 

#Login Page 
@app.route('/sqlLibrary', methods=['GET', 'POST']) 
def login(): 
    error = None 
    global reqLib 
    global user 

    if request.method == 'POST': 
     #Grabs username & password entered by user 
     usr = str(request.form['username']) 
     pwd = str(request.form['password']) 

     #Requests SQL Library list from Stash repository 
     try: 
      reqLib = requests.get('https://stash/rest/api/latest/projects/PLAN/repos/sqlquerylibrary/files?at=refs%2Fheads%2Fmaster&limit=100000', auth=(usr, pwd), verify=False) 
     except Exception as e: 
      return str(e) 

     if reqLib.status_code != 200: 
      error = 'Invalid Credentials. Please try again.' 
     else: 
      user = User(usr,pwd) 
      login_user(user) 
      return redirect(url_for('script')) 

    return render_template('login.html', error=error) 

@login_manager.user_loader 
def load_user(id): 
    global user 
    global reqLib 

    if user != '': 
     if reqLib.status_code == 200: 
      return user 

    return None 

class User(UserMixin): 

    def __init__(self, name, id, active=True): 
     self.name = name 
     self.id = id 
     self.active = active 

    def is_active(self): 
     return self.active 

    def is_anonymous(self): 
     return False 

    def is_authenticated(self): 
     return True 

def scrape(): 
    #confidential. Just some post-processing using reqLib data. 

if __name__ == "__main__": 
    app.config["SECRET_KEY"] = "MAD_SECRET_KEY" 
    app.run() 

回答

0

我找到了答案。發佈信息以幫助決定在IIS上實施Flask的人員,這可能會遇到同樣的問題。

權限錯誤確實是IIS端的問題。 您必須更改IIS的權限設置。此鏈接幫助我:

IIS7 Permission Denied - ASP File Write

在IIS管理器,我點擊應用程序池在連接窗格。 然後改爲選擇我的Flask應用程序(而不是鏈接中所述的DefaultAppPool)。 我右鍵單擊它並選擇高級設置。 然後我將標識字段改爲流程模型節到LocalSystem。 點擊確定。

更改完成後,python requests模塊獲得< 200>響應,並且驗證憑證成功&避免了連接錯誤! ^^