在帖子请求中发送多个文件

时间:2014-08-01 19:07:12

标签: python curl python-requests

我正在尝试在帖子请求中发送多个文件。以下是我使用的代码。

orig_src = "./orig_src/"
url = "http://"+server+":"+port+"/my_service"
files = []
for root, dirs, files in os.walk(orig_src):
    for fileName in files:
        if len(files) > 0:
            relDir = os.path.relpath(root, orig_src)
            relFile = os.path.join(relDir, fileName)
            files.append(('srcFile', (fileName, open(orig_src+relFile, 'rb'))))
response = requests.post(url, files = files)

尝试执行此操作时出现以下错误:

File "/usr/lib/python2.7/posixpath.py", line 66, in join
if b.startswith('/'):
AttributeError: 'tuple' object has no attribute 'startswith'

知道错误可能在哪里?之前我使用-F选项创建了一个curl请求,并使用os.system命令运行它。那很好。但我现在无法发送帖子请求。我哪里错了?

1 个答案:

答案 0 :(得分:1)

您正在将元组传递给os.path.join,因为追溯会解释(in join)。

您需要为您传递给请求的列表提供更好的名称,因为您在将其声明为空列表后重复使用名称files

  • 首先,您将files定义为第3行的空列表
  • 然后,您将files定义为您在第4行的for循环中解压缩的元组中收到的第三个项目。

由于您正在修改files,因此您需要将元组添加到列表中。 Python期望你理解这一点并最终遍历列表直到它到达第一个元组。在这种情况下,fileName现在是一个元组,你将它传递给os.path.join,它需要一个字符串,而不是一个元组。

更改两个绑定中的一个,你应该没问题。