我正在尝试在python脚本中执行curl命令。
如果我在终端中执行此操作,它看起来像这样:
curl -X POST -d '{"nw_src": "10.0.0.1/32", "nw_dst": "10.0.0.2/32", "nw_proto": "ICMP", "actions": "ALLOW", "priority": "10"}' http://localhost:8080/firewall/rules/0000000000000001
我已经看到了使用pycurl
的建议,但我不知道如何将其应用到我的。
我尝试使用:
subprocess.call([
'curl',
'-X',
'POST',
'-d',
flow_x,
'http://localhost:8080/firewall/rules/0000000000000001'
])
这是可行的,但有更好的方法吗
8条答案
按热度按时间yqlxgs2m1#
不要!
我知道,这是没有人想要的“答案”。但是,如果一件事值得去做,* 它就值得做对 *,对吗?
这看起来是个好主意,可能是因为人们普遍误解了
curl
之类的shell命令不是程序本身。所以你问的是“我如何从我的程序中运行这个程序,只是为了发出一个微不足道的小Web请求?"这太疯狂了,一定有更好的方法,对吗?
Uxio's answer当然可以。但是它看起来不太像 * Python *,不是吗?仅仅为了一个小小的请求,就需要做很多工作。Python应该是关于flying的!任何写这篇文章的人可能都希望他们只是
call
'dcurl
!这是可行的,但有更好的办法吗?
是的,有一个更好的方法!
Requests: HTTP for Humans(第一个字母)
事情不应该是这样的。在Python中不应该。
让我们来看看这个页面:
就是这样,真的!然后你就有了原始的
res.text
,或者res.json()
输出,res.headers
,等等。你可以查看文档(上面的链接)来了解设置所有选项的细节,因为我想OP现在已经前进了,而你--现在的读者--可能需要不同的选项。
但是,举个例子,它就像这样简单:
您甚至可以使用一个很好的Python dict在GET请求中提供
params={}
的查询字符串。简单而优雅。保持冷静,继续飞翔。
7gs2gvoe2#
使用这个tool(免费托管的here)将curl命令转换为等价的Python请求代码:
示例:
巧妙地转换为:
xwmevbvl3#
你可以像@roippi说的那样使用urllib:
jgovgodb4#
如果您没有过多地调整curl命令,也可以直接调用curl命令
ktecyv1j5#
尝试使用子进程
使用
getstatusoutput
存储结果um6iljoc6#
您可以使用以下代码片段
yws3nbqq7#
改写这篇文章中的一个答案,而不是使用cmd.split().尝试用途:
然后将参数提供给subprocess.Popen。
查看此文档以了解更多信息:https://docs.python.org/2/library/subprocess.html#popen-constructor
s4n0splo8#
在
subprocess
模块中,还有一个名为run
的选项使用它