【问题标题】:Cannot Post CSV file in Python无法在 Python 中发布 CSV 文件
【发布时间】:2017-11-13 14:36:06
【问题描述】:

我在 python 3 中使用 requests.post 方法上传 CSV 文件时遇到问题。

from requests.auth import HTTPBasicAuth
import csv
import requests

user='myuser'
pw='mypass'
advertiserid='10550'
campaignid='12394'
url='http://example.example.com/api/edc/upload/'+advertiserid+'/'+campaignid+'/'+'?encoding=utf-8&fieldsep=%3B&decimalsep=.&date=DD%2FMM%2FYYYY&info=1&process=1'
csv="myfile.csv"

with open(csv, 'r') as f:
    r = requests.post(url, files={csv: f})
    print(r)

输出是“响应 [502]”

知道可能是什么问题吗?

非常感谢!

【问题讨论】:

  • 不要将您的文件称为“csv”,因为这已经是您要导入的库的名称。

标签: python csv python-requests


【解决方案1】:

您可以在此处参考 Requests 库的文档:post-a-multipart-encoded-file

将您的请求行更改为:

r = requests.post(url, files={'report.csv': f})

【讨论】:

  • 我正在阅读。我尝试更改 taht 行但是...同样的错误。还是谢谢
【解决方案2】:

尝试以二进制模式打开它?并使用特定的“文本/csv”mime 类型?

with open(csv, 'rb') as f:
    r = requests.post(url, files={'file': ('myfile.csv', f, 'text/csv', {'Expires': '0'})})
    print(r.text)

如果它仍然不起作用,请尝试不使用二进制文件,但仍然使用其余的。 如果它仍然不起作用,请打印确切的错误消息。而 502 (Bad Gateway) 可能只是意味着您没有定位正确的 url。 (您不是针对 example.com,对吗?

【讨论】:

  • 谢谢 Samuel,还是不行...这是错误: 502 代理错误

    代理错误

    代理服务器收到来自上游服务器的无效响应。
    代理服务器无法处理请求GET /api/edc/upload/10550/12394/

    原因:从远程服务器读取错误

  • 似乎错误不在您这边(如果您的目标是正确的网址)。您要定位的完整网址是什么? (如果可以上网?)
  • 由于公司政策,我无法提供网址。我会深入研究它。谢谢!
【解决方案3】:
csv="myfile.csv"

url='http://example.example.com/api/edc/upload/'+advertiserid+'/'+campaignid+'/'+'?encoding=utf-8&fieldsep=%3B&decimalsep=.&date=DD%2FMM%2FYYYY&info=1&process=1'

files = {'upload_file': open(csv,'rb')}

r = requests.post(url, files=files)

【讨论】:

    【解决方案4】:

    假设我有一个用于导入 CSV 文件(多部分编码文件)的 REST API

    对应的python请求应该如下所示。

    import requests
    
    ​
    hierarchy_file_name = '/Users/herle/ws/LookoutLab/data/monitor/Import_Hierarchy_Testcase_v2.csv'
    
    headers = {
      'x-api-key': **REST_API_KEY**,
      'x-api-token': **REST_API_TOKEN**,
      'accept': 'application/json'
    }
    
    files = {'file': (hierarchy_file_name, open(hierarchy_file_name, 'rb'), 'text/csv')}
    url = "https://abcd.com"
    response = requests.post(url +'/api/v2/core/workspaces/import/validate',
                            files=files, verify=False, headers=headers)
    print("Created")
    print(response)
    print(response.text)
    
    

    注意: 确保不要在标题中添加'Content-Type': 'multipart/form-data'

    【讨论】:

      猜你喜欢
      • 2023-01-30
      • 2020-10-10
      • 2017-06-24
      • 2018-08-27
      • 2021-03-23
      • 1970-01-01
      • 2023-03-07
      • 2018-03-25
      • 1970-01-01
      相关资源
      最近更新 更多