【问题标题】:Flask / Eve: Internal GET request with parametersFlask / Eve:带参数的内部 GET 请求
【发布时间】:2015-12-12 13:48:05
【问题描述】:

我正在使用flask 网络服务器(eve api 的一部分)并且需要执行内部GET-request。

对于外部请求,我使用以下代码:

url = 'http://127.0.0.1:5000/simulations'
r = requests.get(url,
                 headers={'Content-Type': 'application/json', 'Accept': 'application/json'},
                 params={'hateoas': False}
                 )

但是,当尝试使用来自烧瓶应用程序中的函数的requests 模块执行请求并引发ConnectionRefusedError 时,这不起作用:

requests.exceptions.ConnectionError: ('连接中止。', ConnectionRefusedError(61, '连接被拒绝'))

为了制作这个request available internally,我考虑使用我的flask应用程序的test_client(),如下所示:

r = app.test_client().get(url,
                          headers={'Content-Type': 'application/json', 'Accept': 'application/json'}
                          )

这工作得很好,但我需要传递额外的参数,正如你在我的第一个示例 sn-p 中使用 requests 模块看到的那样。所以我把上面的代码扩展成这样:

r = app.test_client().get(url,
                          headers={'Content-Type': 'application/json', 'Accept': 'application/json'},
                          params={'hateoas': False}
                          )

不幸的是,这引发了TypeError

TypeError: init() 得到了一个意外的关键字参数 'params'

那么有没有办法在内部使用flask或eve来处理GET-request?

我知道有一个 get_internal repo branch 用于 eve 提供 get_internal() 的开发实现,与 post_internal() 等其他请求类型相当。但我不喜欢使用这个开发分支,因为不确定这个功能是否会在下一个稳定版本中实现。

【问题讨论】:

    标签: python flask request internal eve


    【解决方案1】:

    你传递查询字符串的方式不对,你应该:

    r = app.test_client().get(url,
                              headers={'Content-Type': 'application/json', 'Accept': 'application/json'},
                              query_string={'hateoas': False})
    

    使用query_string 关键字。

    顺便说一句,如果您要发帖,请使用 data 关键字。

    【讨论】:

    • 除了我原来的问题:有没有办法获得 json 格式的响应?
    • 你的问题没有相关代码。不过你可以试试jsonify
    • 我已经尝试过这会导致Working outside of request context 错误。但是,我为此询问了new question。非常感谢。
    猜你喜欢
    • 2019-04-10
    • 1970-01-01
    • 1970-01-01
    • 2015-02-03
    • 2015-02-27
    • 1970-01-01
    • 1970-01-01
    • 2015-08-27
    • 1970-01-01
    相关资源
    最近更新 更多