首页 > 解决方案 > 如何使用 Python 连接到 localhost python flask API

问题描述

我正在运行基于本地 python 烧瓶的 api。它在以下基本 url 上运行:

http://localhost:80/

 * Serving Flask app "main" (lazy loading)
 * Environment: production
   WARNING: Do not use the development server in a production environment.
   Use a production WSGI server instead.
 * Debug mode: off
 * Running on http://localhost:80/ (Press CTRL+C to quit)

这是它的代码:

if __name__ == '__main__':
    import os

    HOST = os.environ.get('SERVER_HOST', 'localhost')
    try:
        PORT = int(os.environ.get('SERVER_PORT', '5555'))
    except ValueError:
        PORT = 5555
    app.run(HOST, 80)

我需要连接到完整 URL 所在的 API:

http://localhost:80/api/v1/face/recognize

我可以使用邮递员连接到它并获得良好的响应。我必须使用另一个 python 项目连接到它。为此,我使用以下代码:

import http.client
import json

headers = {'appName': 'Tirunka', 'app_key': '6e0e36ff19de5623',
                           'Content-Type': 'application/json'}
data = {
    "imageUrl": "kf7ZrqtJ5Sucu02eL7kerZrOG7Or ........ and so on ..........Haypep1uir/AKRH9K662T92K5TRh/",
    "galleryName": 'test'
}

json_data = json.dumps(data)

conn = http.client.HTTPSConnection('http://localhost:80')
conn.request("POST", "/api/v1/face/recognize", json_data, headers)

在这一行conn = http.client.HTTPSConnection('http://localhost:80/'),我遇到了以下异常:

nonnumeric port: '80/'

我似乎一直在使用正确的网址。我无法理解错误。任何人都可以请帮忙。谢谢

标签: pythonapiflask

解决方案


文档(重点是我的):

一个 HTTPConnection 实例代表一个与 HTTP 服务器的事务。它应该被实例化,并传递一个主机和可选的端口号。如果未传递端口号,则从主机字符串中提取端口(如果它具有 host:port 形式),否则使用默认 HTTP 端口 (80)。

您的字符串不尊重格式host:port。删除尾部斜杠,或使用关键字参数指定端口:

conn = http.client.HTTPSConnection('http://localhost:80/') # does not work (InvalidURL: nonnumeric port: '80/')
conn = http.client.HTTPSConnection('http://localhost:80') # works
conn = http.client.HTTPSConnection('http://localhost',port=80) # works

推荐阅读