python - 将此 curl 命令转换为 Python 3

标签 python post curl https python-3.x

以下 curl 命令完美运行(私有(private)数据已匿名):

curl -X POST 'https://api.twilio.com/2010-04-01/Accounts/abc/SMS/Messages.json' \
-d 'From=%2B14155551234' \
-d 'To=%2B17035551212' \
-d 'Body=This+is+a+test' \
-u foo:bar

如何以正确的 Python3.3 方式发送完全相同的 HTTPS POST 请求?如果可以避免,我不想使用 Python 3.3 的标准库以外的任何东西(换句话说,不使用 twilio python 模块,或“请求”,或 pycurl,或普通 Python 之外的任何东西3.3安装)。

首选的 Python 方法似乎从一个版本到另一个版本不断发展,我通过谷歌搜索找到的片段从未提及他们正在使用哪个版本或不做登录部分,Python 文档充满了“自 3.x 以来不推荐使用”。 x”,但从不包括新的做事方式的代码示例....

如果 curl 可以如此轻松地做到这一点,那么标准 Python 3.3 也可以。但是,现在应该具体如何完成?

最佳答案

这是一个同时适用于 Python 2 和 3 的版本:

import requests # pip install requests

url = 'https://api.twilio.com/2010-04-01/Accounts/abc/SMS/Messages.json'
r = requests.post(url, dict(
        From='+17035551212',
        To='+17035551212',
        Body='This is a test'), auth=('foo', 'bar'))

print(r.headers)
print(r.text) # or r.json()

要在 Python 3.3 上使用基本的 http 身份验证发出 https post 请求:

from base64 import b64encode
from urllib.parse import urlencode
from urllib.request import Request, urlopen

user, password = 'foo', 'bar'
url = 'https://api.twilio.com/2010-04-01/Accounts/abc/SMS/Messages.json'
data = urlencode(dict(From='+17035551212', To='+17035551212', 
                      Body='This is a test')).encode('ascii')
headers = {'Authorization': b'Basic ' +
        b64encode((user + ':' + password).encode('utf-8'))}
cafile = 'cacert.pem' # http://curl.haxx.se/ca/cacert.pem
response = urlopen(Request(url, data, headers), cafile=cafile)

print(response.info())
print(response.read().decode()) # assume utf-8 (likely for application/json)

关于python - 将此 curl 命令转换为 Python 3,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14393339/

相关文章:

python - 如何在pandas中映射不同数据帧基础日期时间的列

python monary 0.2.3 (mongo monary driver) : error in setup on windows 64bit (Anaconda distribution)

ruby-on-rails - 使用 Rails link_to 来发布链接

JavaScript 从文本字符串 PUT 文件

c++ - 如何将文本从网站复制到 C++ 中的字符串?

php - 遵循 50 次重定向后,Curl 失败,但 wget 工作正常

node.js - 无法在hostmonster上运行express服务器

python - 用于半实现抽象类的 Pylint

python - 无法转置 dask.dataframe - 获取未绑定(bind)本地错误

php - 通过 PHP POST 方法获取 elRTE 内容