如何在 Bottle 中将 wsgi.url_scheme 设置为 https?

2023-12-10

我想将所有请求重定向到http to https.

是否有通用的设置方法wsgi.url_scheme to https在 Python 2.7 Bottle 应用程序中?

应用程序的一般结构是:

setup.py  // contains 'install_requires'  
wsgi  
 - myapplication.py  // the custom application containing bottle routes

wsgi.url_scheme似乎与环境变量有关:

http://wsgi.readthedocs.org/en/latest/definitions.html#envvar-wsgi.url_scheme

但我不确定如何实际将环境变量“设置”为https以及是否可以在setup.py or myapplication.py文件。

这里有一段代码:

https://github.com/defnull/bottle/issues/347

def i_am_https_dammit(app):
    def https_app(environ, start_response):
        environ['wsgi.url_scheme'] = 'https'
        return app(environ, start_response)
    return https_app

但我不知道如何实现这一点,因为我对应用程序的调用来自cork并且只使用:

application=default_app()  
session_opts = {
    'session.cookie_expires': True,
    'session.encrypt_key': 'please use a random key and keep it secret!',
    'session.httponly': True,
    'session.timeout': 3600 * 24,  # 1 day
    'session.type': 'cookie',
    'session.validate_key': True,
}
application = SessionMiddleware(application, session_opts)

如果我不明白你的问题,请原谅我,但为什么不为你的 Bottle 应用程序安装一个简单的重定向插件呢?像这样的东西:

import bottle

app = bottle.app()

def redirect_http_to_https(callback):
    '''Bottle plugin that redirects all http requests to https'''

    def wrapper(*args, **kwargs):
        scheme = bottle.request.urlparts[0]
        if scheme == 'http':
            # request is http; redirect to https
            bottle.redirect(bottle.request.url.replace('http', 'https', 1))
        else:
            # request is already https; okay to proceed
            return callback(*args, **kwargs)
    return wrapper

bottle.install(redirect_http_to_https)

@bottle.route('/hello')
def hello():
    return 'hello\n'

bottle.run(host='127.0.0.1', port=8080)

用卷曲测试:

% 05:57:03 !3000 ~>curl -v 'http://127.0.0.1:8080/hello'
* Connected to 127.0.0.1 (127.0.0.1) port 8080 (#0)
> GET /hello HTTP/1.1
> User-Agent: curl/7.30.0
> Host: 127.0.0.1:8080
> Accept: */*
>
* HTTP 1.0, assume close after body
< HTTP/1.0 303 See Other
< Date: Sun, 01 Dec 2013 10:57:16 GMT
< Server: WSGIServer/0.1 Python/2.7.5
< Content-Length: 0
< Location: https://127.0.0.1:8080/hello
< Content-Type: text/html; charset=UTF-8

有关插件如何工作的详细信息,请参阅瓶子文档.

简而言之,该插件的工作原理是拦截所有请求并检查协议(“方案”)。如果方案是“http”,则插件指示 Bottle 返回到相应安全 (https) URL 的 HTTP 重定向。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 Bottle 中将 wsgi.url_scheme 设置为 https? 的相关文章

随机推荐

  • Windows Phone 8 弹出窗口的宽度和高度

    我将网格放置在弹出控件中 我希望网格能够根据 Windows Phone 8 应用程序的 3 种不同布局大小自动调整大小 480 800 768 1280 720 1280 但似乎我必须设置宽度和高度脱离电网明确地因为它根据子控件大小重新调
  • API 调用中会话 ID 未刷新

    我正在尝试使用VBA Excel访问网站提供的APIwww myfxbook com API文档在这里 https www myfxbook com fr api 获取数据的步骤如下 通过登录API登录 从登录 API 的响应中获取会话的会
  • 在 Windows 上安装“kgio-2.9.2”Gem 时出错

    在 Windows 上安装 kgio gem 时遇到问题 使用 Ruby 2 1 6 32 位和已安装的 DevKit Installing kgio 2 9 2 with native extensions Gem Ext BuildEr
  • 无效的应用程序二进制文件[关闭]

    这个问题不太可能对任何未来的访客有帮助 它只与一个较小的地理区域 一个特定的时间点或一个非常狭窄的情况相关 通常不适用于全世界的互联网受众 为了帮助使这个问题更广泛地适用 访问帮助中心 今天我们收到了有关我们提交的反馈 我们不明白所报告的问
  • 在node.js中读写json文件

    好的 我有这个 json 文件 joe name joe lastName black matt name matt lastName damon 我想用node js添加一个人 joe name joe lastName black ma
  • 以 S+(版本 31 及更高版本)为目标需要 FLAG_IMMUTABLE 或 FLAG_MUTABLE 之一

    我正在制作通知应用程序并努力解决以下错误 java lang IllegalArgumentException com tonyapp rabbitfarm Targeting S version 31 and above requires
  • Backbone.js - 从 url 返回 JSON

    在尝试学习 Backbone js 时 我一直在尝试使用以下代码获取 JSON 文件的内容 function var MyModel Backbone Model extend var MyCollection Backbone Colle
  • 在 R 中定义 CTE(公用表表达式)?

    我在服务器上有这个表 我正在使用 R 查询它 library dplyr library DBI con lt dbConnect RSQLite SQLite memory dbWriteTable con iris iris 我能够运行
  • 重新分配选票,同时淘汰候选人

    考虑一下这个想法 我有一个排名选择投票系统 不符合门槛的候选人将在不同轮次中被淘汰 在此示例中 我们有 6 名候选人在初选中竞选两个席位 此时 我们已进入第四轮 没有获胜者 其中候选人 3 和 5 已被淘汰 在这一轮中 候选人4将被淘汰 他
  • 克隆芹菜链

    我有一个有趣的问题 试图克隆芹菜链以在组中使用 我的预期用例是这样的group chain clone args args for args in it 然而它一直抱怨没有足够的论据 我已经使用下面的内容对此进行了分解 在一个名为tasks
  • 春季启动 JSP 404

    我正在尝试在我的 Spring Boot 服务中添加一个 jsp 页面 我的问题是 每次我尝试进入该页面时 我都会遇到以下问题 白标错误页面 此应用程序没有 error 的显式映射 因此您会看到 这是后备措施 2015 年 EEST 4 月
  • 如何为 MVC 创建自定义验证属性

    我想为 MVC2 的电子邮件地址创建一个自定义验证属性 该属性不是从 RegularExpressionAttribute 继承 但可以在客户端验证中使用 有人能指出我正确的方向吗 我尝试了这样简单的事情 AttributeUsage At
  • 如果 HTML 文件已更新,则执行 JavaScript [关闭]

    很难说出这里问的是什么 这个问题模棱两可 含糊不清 不完整 过于宽泛或言辞激烈 无法以目前的形式合理回答 如需帮助澄清此问题以便重新打开 访问帮助中心 我正在尝试在 JavaScript jQuery 甚至 PHP 中找到一个插件或函数 如
  • 从 URL 中删除应用程序名称

    我的网站使用 JSF 并且 url 似乎是 http mysitename com wompower6 faces home xhtml 我正在使用 Prettyfaces 因此如果我在 Pretty config xml 中使用以下内容
  • 如何在 PostgreSQL 中搜索一定范围的整数?

    我有一个整数列 我需要搜索该列以 19 开头的行 在 MySQL 中我会使用 SELECT WHEREid喜欢 19 ERROR operator does not exist integer unknown LINE 1 select f
  • 如何从 NSDictionary 获取键/值对?

    我在 NSDictionary 方面需要很少的帮助 如果我有字典 我怎样才能得到一对 让我们说一个 id 的值 NSDictionary allCourses NSJSONSerialization JSONObjectWithData a
  • Django 管理员。显示分层下拉过滤器

    我有以下模型 from django db import models class State models Model name models CharField max length 30 abbreviation models Cha
  • Azure-Functions:您可以使用 web.config 限制(例如 IP 限制或基本身份验证)

    Azure 网站可能存在 IP 限制 as 正在使用基本身份验证保护站点 这些技术或任何其他 web config 技术是否可以在 Azure Functions 上使用 或者是否需要进行编码 我在 Azure Function 的 www
  • AchartEngine 中的圆环图半径

    我正在尝试在 aChartengine 中设置圆环图内圆半径和外圆半径 下面是我的代码 public class MainActivity extends Activity GraphicalView gv RelativeLayout r
  • 如何在 Bottle 中将 wsgi.url_scheme 设置为 https?

    我想将所有请求重定向到http to https 是否有通用的设置方法wsgi url scheme to https在 Python 2 7 Bottle 应用程序中 应用程序的一般结构是 setup py contains instal