Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/334.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 任务已销毁,但在尝试使用HTTPS运行aiohttp服务器时该任务处于挂起状态_Python_Python 3.x_Python Asyncio_Aiohttp - Fatal编程技术网

Python 任务已销毁,但在尝试使用HTTPS运行aiohttp服务器时该任务处于挂起状态

Python 任务已销毁,但在尝试使用HTTPS运行aiohttp服务器时该任务处于挂起状态,python,python-3.x,python-asyncio,aiohttp,Python,Python 3.x,Python Asyncio,Aiohttp,试图找出如何使HTTPS与服务器一起工作,但当我在使用ssl\u上下文时尝试向路由发出请求时,我不断遇到以下错误 任务已被销毁,但它处于挂起状态 如果我从web.run\u app删除ssl\u上下文,服务器工作正常,但我无法通过HTTPS访问服务器。不确定我是否使用了ssl\u上下文正确的方法?如有任何见解,将不胜感激。我的服务器示例如下: import json import asyncio from aiohttp import web from aiomysql import crea

试图找出如何使HTTPS与服务器一起工作,但当我在使用
ssl\u上下文时尝试向路由发出请求时,我不断遇到以下错误

任务已被销毁,但它处于挂起状态

如果我从
web.run\u app
删除
ssl\u上下文
,服务器工作正常,但我无法通过HTTPS访问服务器。不确定我是否使用了
ssl\u上下文
正确的方法?如有任何见解,将不胜感激。我的服务器示例如下:

import json
import asyncio

from aiohttp import web
from aiomysql import create_pool
from aiomysql import DictCursor

host = 'localhost'
user = 'user'
password = 'password'
db = 'db'

routes = web.RouteTableDef()
headers = {
    'Access-Control-Allow-Origin': '*',
    'Access-Control-Allow-Methods': 'GET,HEAD,OPTIONS,POST,PUT',
    'Access-Control-Allow-Headers': 'Origin, X-Requested-With, Content-Type, Accept, Authorization'
}
async def fetch_data(table):
    async with create_pool(host=host,port=3306,user=user,password=password,db=db) as pool:
        async with pool.get() as conn:
            async with conn.cursor(DictCursor) as cur:
                sql = "SELECT id FROM `{}`"
                sql = sql.format(table)
                await cur.execute(sql)
                dataset = await cur.fetchall()
                return dataset

@routes.get('/hello')
async def hello(request):
    dataset = await fetch_data('my_table')
    return web.json_response(dataset, headers=headers)

app = web.Application()
app.add_routes(routes)
web.run_app(app, port=9090, ssl_context='https')

您需要创建SSL上下文(例如,使用方法
SSL.create_default_context()
),然后向其提供证书(可以自签名)

要创建自签名证书,请使用此命令(只需将所有问题保留为默认值):

然后,在脚本中使用此证书创建ssl上下文:

import ssl

sc = ssl.create_default_context(ssl.Purpose.CLIENT_AUTH)
sc.load_cert_chain('selfsigned.crt', 'selfsigned.key')
…然后将其提供给您的
网站。运行应用程序()


运行服务器并通过https导航到您的页面现在应该可以工作了,但是,当然您需要在浏览器中确认证书是正确的。

您需要创建SSL上下文(例如,使用方法
SSL.create_default_context()
),然后向其提供证书(可以自签名)

要创建自签名证书,请使用此命令(只需将所有问题保留为默认值):

然后,在脚本中使用此证书创建ssl上下文:

import ssl

sc = ssl.create_default_context(ssl.Purpose.CLIENT_AUTH)
sc.load_cert_chain('selfsigned.crt', 'selfsigned.key')
…然后将其提供给您的
网站。运行应用程序()


运行服务器并通过https导航到您的页面现在应该可以工作了,但是,当然您需要在浏览器中确认证书是正确的。

这更有意义。非常感谢。现在,我可以使用已经为运行服务器的域安装的SSL了吗?还是必须是自签名证书?因为当我尝试请求路由时,我得到“您的连接不是私有的”,但我假设这是因为它是自签名的?@antfuentes87是的,如果您有自己的证书(来自示例Let's encrypt),您可以在程序中使用它。使用自签名证书,您将始终收到浏览器警告消息。我建议在某个代理(例如,nginx,它将为您处理SSL)后面的http模式下运行Python aiohttp应用程序。我正在从一个已安装SSL的cpanel帐户运行服务器。
.crt
键在哪里。可以找到文件吗?我假设我会将这两个文件的文件路径放在
sc.load\u cert\u chain('selfsigned.crt','selfsigned.key')
中,为了使用域SSL?@antfuentes87,您需要询问服务提供商证书的加载位置。您也可以使用Apache服务器制作代理,但这也取决于服务提供商。我自己也能找到它们,而且很有效!太棒了!非常感谢你。我当时正在乱搞
create\u default\u上下文
,但没有意识到可以只加载一个预先存在的SSL。再次感谢你们!这更有道理。非常感谢。现在,我可以使用已经为运行服务器的域安装的SSL了吗?还是必须是自签名证书?因为当我尝试请求路由时,我得到“您的连接不是私有的”,但我假设这是因为它是自签名的?@antfuentes87是的,如果您有自己的证书(来自示例Let's encrypt),您可以在程序中使用它。使用自签名证书,您将始终收到浏览器警告消息。我建议在某个代理(例如,nginx,它将为您处理SSL)后面的http模式下运行Python aiohttp应用程序。我正在从一个已安装SSL的cpanel帐户运行服务器。
.crt
键在哪里。可以找到文件吗?我假设我会将这两个文件的文件路径放在
sc.load\u cert\u chain('selfsigned.crt','selfsigned.key')
中,为了使用域SSL?@antfuentes87,您需要询问服务提供商证书的加载位置。您也可以使用Apache服务器制作代理,但这也取决于服务提供商。我自己也能找到它们,而且很有效!太棒了!非常感谢你。我当时正在乱搞
create\u default\u上下文
,但没有意识到可以只加载一个预先存在的SSL。再次感谢你们!
web.run_app(app, port=9090, ssl_context=sc)