簡體   English   中英

Flask對IIS上的Python請求 連接錯誤

[英]Python's Requests on IIS with Flask | Connection Error

我一直在努力使Flask應用程序在IIS服務器上運行,並且由於以下鏈接而取得了一些進展:

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

這樣說來,當我通過IIS進行部署時,嘗試使用“請求” python模塊時,我遇到了麻煩。 當我在本地啟動該應用程序時,該應用程序運行良好-也就是說,如果我通過終端啟動該應用程序,則在請求JSON數據時收到正確的<200>響應

> python app.py

本質上,該應用程序通過其API從我的Stash存儲庫請求JSON數據。 Stash的API需要對此get請求進行用戶身份驗證。 請求模塊使操作變得很容易...我正在盡可能避免使用原始HTML(Web noob ...>。<;)。

在IIS上部署時,我在Python中收到以下錯誤異常,但不知道為什么:

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

您可以在下面引用整個代碼(忽略機密內容)。 基本上,我有一個login.html頁面,其中包含用戶憑據。 然后,我使用這些憑據發送獲取請求

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()

我找到了答案。 發布以幫助決定在IIS上實施Flask的任何人,而這可能會遇到同一問題。

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

IIS7權限被拒絕-ASP文件寫入

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

進行此更改后,python請求模塊將獲得帶有成功身份驗證憑據的<200>響應,並避免了連接錯誤! ^^

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM