【问题标题】:Python Requests POST not workingPython 请求 POST 不起作用
【发布时间】:2016-03-27 13:11:54
【问题描述】:

我正在使用 python 请求模块来调用 API。 在我将代码推送到 AWS 之前,一切都运行良好。即使在 AWS 上,如果我在开发服务器上工作,它也可以工作,即 ec2.####.amazon.com:8000

这是我的代码:

r = requests.post(api_url, data = {"var 1":"value", "var 2":"value"})

我的 API url 不允许使用 GET 方法,因此我收到错误消息,GET 方法不允许,这意味着 requests.post 读作 get

知道这里出了什么问题。

【问题讨论】:

  • 您是否尝试过在没有端口 8000(django 的生产环境模式)的情况下访问项目的其余部分,也可以尝试评论您的 request.method 检查并查看对您的 API 的请求是否有效干杯!
  • @JatinBansal 是的,它在没有 8000 的情况下也能正常工作,只有帖子给出错误 get 工作正常
  • 您可以尝试任何 REST 客户端来测试您的 POST 请求吗?有很多可用的,例如 Google Chrome 的高级 REST 客户端。另外请发布一些错误发生时获得的 django 调试信息(将调试设置为 True)。
  • 在您的本地主机上是您的代码工作正常 GET & POST。
  • @JatinBansal 是的,我自己发布了答案

标签: python django amazon-web-services python-requests


【解决方案1】:

实际上问题是由于 SSL ,如果您的服务器使用https 方法,那么您需要在requests.post 中添加以下行

r = requests.post(api_url, data = {"var 1":"value", "var 2":"value"}, verify=True)

还要确保您的 api_url 包含 https 而不是 http

我为此写了一个小函数

def get_base_url(request):
    host = get_host(request)
    if request.is_secure():
        return '{0}{1}/{2}'.format('https://', host, 'url')
    else:
        return '{0}{1}/{2}'.format('http://', host, 'url')

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-12-25
    • 1970-01-01
    • 2017-01-05
    • 2016-11-05
    • 2013-06-01
    • 1970-01-01
    相关资源
    最近更新 更多