我一直努力讓瓶應用了我的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()