【问题标题】:Curl Working but Python Requests/Sessions gives 404 error卷曲工作,但 Python 请求/会话给出 404 错误
【发布时间】:2018-09-12 16:24:08
【问题描述】:

我正在尝试从Linux 框远程访问 InfluxDB。当我使用 CURL 命令时,我能够获取数据库详细信息 -

curl http://xx.xxx.xx.xxx:8086/query --data-urlencode "q=SHOW DATABASES"
{"results":[{"statement_id":0,"series":[{"name":"databases","columns":["name"],"values":[["_internal"],["ExampleDatabase"]]}]}]}

当使用Requests Python 尝试相同时,我得到 404 page not found

import requests
shorturl = 'http://xx.xxx.xx.xxx:8086/query --data-urlencode "q=SHOW DATABASES"'
r = requests.get(shorturl)
print (r.text)

是否需要传递任何东西才能使其在 Python 中运行。当我尝试在浏览器中点击 URL - http://xx.xxx.xx.xxx:8086/query --data-urlencode "q=SHOW DATABASES" 时,我收到 404 消息。从 Linux 机器远程登录到托管 InfluxDB 的机器正在运行。

Python v2.7.5。我尝试了互联网上给出的所有可能的方法,但都没有奏效。

请澄清

【问题讨论】:

  • 我不是 python 请求方面的专家,但你得到的 shorturl 对我来说似乎是一个错误的 url。你可能需要做类似 r = requests.get(url_link, params=payload)

标签: python curl python-requests influxdb


【解决方案1】:

正如我在 cmets 上所说,您的带有 --data-urlencode 的短网址对于 curl 是正确的,对于 python 请求无效,请试试这个,

payload = {'q': 'SHOW DATABASES'}
shorturl = 'http://xx.xxx.xx.xxx:8086/query'
r = requests.get(shorturl, params=payload)
print (r.text)

你可以在这里http://docs.python-requests.org/en/master/user/quickstart/了解更多信息

【讨论】:

  • 乐于助人:)
【解决方案2】:

--data-urlencode 是一个 curl 选项,用于将 POST 参数传递给您的 HTTP 请求。

您应该对请求使用适当的方法来获得相同的行为。 --data-urlencode 在 python 中无效

这可能有效:

import requests
shorturl = 'http://xx.xxx.xx.xxx:8086/query'
r = requests.post(shorturl, data={'q': 'SHOW DATABASES'})

https://www.w3schools.com/tags/ref_httpmethods.asp

【讨论】:

  • 感谢 man 提供关于 --data-urlencode 部分的信息。像魅力一样工作!
猜你喜欢
  • 2022-01-07
  • 1970-01-01
  • 2014-10-15
  • 2019-10-06
  • 2020-09-22
  • 2016-01-25
  • 1970-01-01
  • 1970-01-01
  • 2014-11-11
相关资源
最近更新 更多