卷曲工作,但Python请求/会话给出404错误

时间:2018-09-12 16:24:09

标签: python curl python-requests influxdb

我正在尝试从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页面未找到

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消息。 Telnet从Linux箱到托管InfluxDB的箱都在工作。

Python v2.7.5。我尝试了互联网上给出的所有可能方式,但没有一个起作用。

请澄清

2 个答案:

答案 0 :(得分:1)

-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

答案 1 :(得分:1)

正如我在评论中说的那样,您正确的带有curl的--data-urlencode短网址不适用于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/

了解更多信息