[英]How to POST a local file using urllib2 in Python?
我是一个完整的Python noob,我正在尝试使用urllib2运行cURL等价物。 我想要的是一个Python脚本,在运行时,它将与终端中的以下cURL命令完全相同:
curl -k -F docfile=@myLocalFile.csv http://myWebsite.com/extension/extension/extension
我在教程页面上找到了以下模板:
import urllib
import urllib2
url = "https://uploadWebsiteHere.com"
data = "{From: 'sender@email.com', To: 'recipient@email.com', Subject: 'Postmark test', HtmlBody: 'Hello dear Postmark user.'}"
headers = { "Accept" : "application/json",
"Conthent-Type": "application/json",
"X-Postmark-Server-Token": "abcdef-1234-46cc-b2ab-38e3a208ab2b"}
req = urllib2.Request(url, data, headers)
response = urllib2.urlopen(req)
the_page = response.read()
但我完全迷失在'数据'和'标题'变量上。 urllib2文档( https://docs.python.org/2/library/urllib2.html )将“数据”输入定义为“指定要发送到服务器的其他数据的字符串”,将“标题”输入定义为“a”字典”。 我完全没有深入尝试遵循这个文档,并且当我只能通过指定文件和URL在终端中完成同样的任务时,我不明白为什么需要字典。 请问好吗?
您发布的数据似乎不是有效的JSON。 假设服务器期望有效的JSON,您应该更改它。
您的curl
调用不会传递任何可选标头,因此您不需要在请求中提供太多内容。 如果要验证确切的标头,可以在curl
调用中添加-vi
,并在Python代码中直接匹配它们。 或者,这对我有用:
import urllib2
url = "http://localhost:8888/"
data = '{"From": "sender@email.com", "To": "recipient@email.com", "Subject": "Postmark test", "HtmlBody": "Hello dear Postmark user."}'
headers = {
"Content-Type": "application/json"
}
req = urllib2.Request(url, data, headers)
response = urllib2.urlopen(req)
the_page = response.read()
切换到使用requests
可能符合您的最佳利益,但对于这个简单的事情,可以使标准库urllib2
工作。
我想要的是一个Python脚本,在运行时,它将与终端中的以下cURL命令完全相同:
$ curl -k -F docfile=@myLocalFile.csv https://myWebsite.com/extension...
curl -F
使用multipart/form-data
内容类型发送文件。 您可以使用requests
库轻松地重现它:
import requests # $ pip install requests
with open('myLocalFile.csv','rb') as input_file:
r = requests.post('https://myWebsite.com/extension/...',
files={'docfile': input_file}, verify=False)
verify=False
是模拟curl -k
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.