2016-04-14 131 views
0

我试图发送一个使用请求模块的csv文件,但我总是收到“400客户端错误:BAD REQUEST for url”错误。根据我的规格,这是一个卷曲的例子; curl -X PUT -H "Content-Disposition: attachment;filename=ABC.csv" -H "Content-Type: application/csv" -T ABC.csv http://.../api/dss/sites/1/vardefs在Python中使用Requests.PUT发送csv文件[400客户端错误:错误请求]

下面是我的python代码;

import requests 
filepath = 'C:\...\ABC.csv' 
with open(filepath) as WA: 
    mydata = WA.read() 
    response = requests.put('http://...../api/dss/sites/1/vardefs', 
          data=mydata,       
          headers = {'content-type':'application/csv', 'Content-Disposition': 'attachment;filename=Cu_temp.csv'},    
          params={'file': filepath} 
      ) 
    response.raise_for_status() 

对我在做什么有什么想法吗?

+0

Url以不同的App数据方式为目标。那么服务器脚本路径(它不是一个url)?你尝试访问没有会话?也许服务器会话工作。 – dsgdfg

+0

@dsgdfg:对不起,我没有得到你。你能解释一下吗? – Muhammad

回答

0

从 '请求' 的文档:

data -- (optional) Dictionary, bytes, or file-like object to send in the body of the Request.

尝试发送WA直接(不读第一)的流媒体上传来代替。此外,总是建议在上传请求时以“rb”(读取二进制)模式打开文件。

(响应注释编辑)

事情是这样的:

import requests 

filepath = 'C:\...\ABC.csv' 
with open(filepath, 'rb') as WA: 
    response = requests.put('http://...../api/dss/sites/1/vardefs', 
          data=WA, 
          headers = { 
              'content-type':'application/csv', 
              'Content-Disposition': 'attachment;filename=Cu_temp.csv' 
             }) 

它的工作了?

+0

@ R Bazhenov:你的意思就像这样'filepath ='C:\ ... \ ABC.json' response = requests.put(.../api/dss/sites/2/vardefs', header = {'content-type':'application/json','Content-Disposition':'attachment; filename = Cu_temp.json'}, params = {'file':filepath})' – Muhammad

+0

这也行不通。 – Muhammad

+0

@muhammadwaseem请尝试编辑后的版本。我删除了'params' - 你的原始'curl'请求中没有任何东西(就像我看来的),把'WA'传递给'data'而不是'mydata'('mydata'是一个字符串,但是'data'参数应该不接受字符串)并将二进制读取模式添加到“open”语句。 –