Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Python中使用urllib2发布本地文件?_Python_Curl_Urllib2 - Fatal编程技术网

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

如何在Python中使用urllib2发布本地文件?,python,curl,urllib2,Python,Curl,Urllib2,我是一个完全的Python noob,正在尝试使用urllib2运行cURL等价物。我想要的是一个Python脚本,它在运行时将执行与Terminal中的以下cURL命令完全相同的操作: curl -k -F docfile=@myLocalFile.csv http://myWebsite.com/extension/extension/extension 我在教程页面上找到了以下模板: import urllib import urllib2 url = "https://upload

我是一个完全的Python noob,正在尝试使用urllib2运行cURL等价物。我想要的是一个Python脚本,它在运行时将执行与Terminal中的以下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文档()将“数据”输入定义为“指定要发送到服务器的其他数据的字符串”,将“标题”输入定义为“字典”。我完全无法理解如何遵循此文档,也不明白为什么在终端中仅通过指定文件和URL就可以完成同样的任务时,需要使用字典。请思考一下?

您发布的数据似乎不是有效的JSON。假设服务器需要有效的JSON,您应该更改它

您的
curl
调用不会传递任何可选的头,因此您不需要在请求中提供太多内容。如果要验证确切的头,可以将
-vi
添加到
curl
调用中,并在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()
切换到使用
请求
可能符合您的最佳利益,但对于这样简单的事情,可以使用标准库
urlib2

我想要的是一个Python脚本,它在运行时将执行与Terminal中的以下cURL命令完全相同的操作:

curl -k -F docfile=@myLocalFile.csv http://myWebsite.com/extension/extension/extension
curl-F
使用
multipart/form data
内容类型发送文件。您可以使用
请求
库轻松复制它:

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)

<代码>验证= false 是模仿“代码> CURL -K/CODE > .< /P>您应该考虑使用Python请求来代替:正如该公司在其主页顶部所说,“Python的标准urllib2模块提供了您所需的大部分HTTP功能,但API已彻底崩溃。它是为不同的时间和不同的web构建的。它需要大量的工作(甚至方法重写)来执行最简单的任务。”.我查看了一下,但甚至无法下载“pip”来下载请求。当我在Terminal中运行“python get pip.py”命令时,我得到一个错误,说这个文件根本不存在(即使我下载了它)。如果没有安装

pip
,你在python中不会走得太远。首先解决这个基本的先决条件。假设你在Mac OS上,可能会有帮助@詹夫辛斯基是对的;你需要皮普。。。。好的,一旦你阅读了日志,你就会知道如何解决这个问题,或者有了一个新的SO问题的基础:-)。。。(可能您需要
sudopip安装请求
,但我不是Mac用户)。此代码不模拟问题中的
curl
命令