python执行curl命令 - requests post json




仅使用标准库将curl POST请求转换为Python (3)

如果可能的话,我希望这能与标准库一起使用。

标准库提供urllibhttplib来处理URL:

>>> import httplib, urllib
>>> params = urllib.urlencode({'apple': 1, 'banana': 2, 'coconut': 'yummy'})
>>> headers = {"Content-type": "application/x-www-form-urlencoded",
...            "Accept": "text/plain"}
>>> conn = httplib.HTTPConnection("example.com:80")
>>> conn.request("POST", "/some/path/to/site", params, headers)
>>> response = conn.getresponse()
>>> print response.status, response.reason
200 OK

但是,如果要执行curl本身,则只需调用os.system()

import os
TEXT = ...
cmd = """curl -u 7898678:X -H 'Content-Type: application/json'""" \
  """-d '{"message":{"body":"%{t}"}}' http://sample.com/36576/speak.json""" % \
  {'t': TEXT}

如果您愿意放宽标准库限制,可以使用PycURL 。 请注意,它不是非常Pythonic(它几乎只是libcurl上的薄薄的贴面),我不确定它与Python 3的兼容性如何。

我想将这个curl命令转换为我可以在Python中用于现有脚本的东西。

curl -u 7898678:X -H 'Content-Type: application/json' \
-d '{"message":{"body":"TEXT"}}' http://sample.com/36576/speak.json

TEXT是我想用其余脚本生成的消息替换的。(这已经合理,虽然我不认为它遵循最佳实践或特殊性可靠。 - 需要找出如何正确学习编程(即不使用谷歌组装东西))

如果可能的话,我希望这能与标准库一起使用。



谢谢大家

这很有效

import urllib2

def speak(status):

    def basic_authorization(user, password):
        s = user + ":" + password
        return "Basic " + s.encode("base64").rstrip()

    req = urllib2.Request("http://example.com/60/speak.json",
                  headers = {
       "Authorization": basic_authorization("2345670", "X"),
     "Content-Type": "application/json",


        "Accept": "*/*",   
        "User-Agent": "my-python-app/1", 
        },
                      data = '{"message":{"body":'+ status +'}}')

    f = urllib2.urlopen(req)


speak('Yay')




curl