繁体   English   中英

如何在Python中使用urllib2发布本地文件?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM