使用Python通过Mockaroo API上传CSV数据集格式异常问题
问题:Mockaroo API上传CSV后内容包含Multipart边界信息,格式异常
我尝试用Python通过Mockaroo API上传CSV数据集,要求如下:
- 上传文件格式为CSV
- 上传后数据集需能用于Mockaroo schemas
目前请求返回200状态码,但上传后的文件内容异常,包含了Multipart的边界和头信息,而非纯CSV数据。
我的代码:
import requests from requests_toolbelt.multipart.encoder import MultipartEncoder import uuid mockaroo_api_key = "XXXXXXXXXX" url = "https://api.mockaroo.com/api/datasets/customer" csv_data = '''\"customer_id\", \"customer_name\" \"84a635ad-9518-4282-ad0f-3557f5d85f03\" ,\"A\" \"022096c3-8d09-4a33-a088-14ec8cac5459\" ,\"B\" \"06eccb26-72ad-4790-8818-cfa2f2ee1cf2\" ,\"C\" \"08d2b709-a86b-49ca-9618-03f1451991bf\" ,\"D\" \"64f6d8ae-ac64-466e-ad42-bac62c93b61e\" ,\"E\" \"9234c861-e8aa-40b9-8e81-13437a22fdeb\" ,\"F\" \"43114a05-2934-4bb2-a5c9-6baceb9a450e\" ,\"G\" \"1e40c936-3292-4b99-80d7-98f182def365\" ,\"H\" \"e3dafab3-6608-47b1-a67e-b0fbdcdb9c0b\" ,\"I\" \"305fa1c5-f082-40b8-8dbc-82b0322fe0b5\" ,\"J\" ''' boundary = uuid.uuid4().hex m = MultipartEncoder(fields={'body': ('customer.csv', csv_data, 'text/csv')}, boundary=boundary) headers = {'Content-Type': m.content_type} params = {'key': mockaroo_api_key, 'filename': 'customer.csv'} response = requests.post(url, params=params, headers=headers, data=m) print(response.status_code) print(response.text)
Mockaroo上显示的异常文件内容:
--72d8375e507a4716a4db93a5a72ad088 Content-Disposition: form-data; name=\"body\"; filename=\"customer.csv\" Content-Type: text/csv \"customer_id\" \"84a635ad-9518-4282-ad0f-3557f5d85f03\" \"022096c3-8d09-4a33-a088-14ec8cac5459\" \"06eccb26-72ad-4790-8818-cfa2f2ee1cf2\" \"08d2b709-a86b-49ca-9618-03f1451991bf\" \"64f6d8ae-ac64-466e-ad42-bac62c93b61e\" \"9234c861-e8aa-40b9-8e81-13437a22fdeb\" \"43114a05-2934-4bb2-a5c9-6baceb9a450e\" \"1e40c936-3292-4b99-80d7-98f182def365\" \"e3dafab3-6608-47b1-a67e-b0fbdcdb9c0b\" \"305fa1c5-f082-40b8-8dbc-82b0322fe0b5\" --72d8375e507a4716a4db93a5a72ad088--
解决方案
问题出在你错误使用了Multipart格式上传数据,Mockaroo的数据集API接受纯CSV内容作为请求体,不需要封装成Multipart表单。修正后的代码如下:
import requests mockaroo_api_key = "XXXXXXXXXX" url = "https://api.mockaroo.com/api/datasets/customer" csv_data = '''"customer_id","customer_name" "84a635ad-9518-4282-ad0f-3557f5d85f03","A" "022096c3-8d09-4a33-a088-14ec8cac5459","B" "06eccb26-72ad-4790-8818-cfa2f2ee1cf2","C" "08d2b709-a86b-49ca-9618-03f1451991bf","D" "64f6d8ae-ac64-466e-ad42-bac62c93b61e","E" "9234c861-e8aa-40b9-8e81-13437a22fdeb","F" "43114a05-2934-4bb2-a5c9-6baceb9a450e","G" "1e40c936-3292-4b99-80d7-98f182def365","H" "e3dafab3-6608-47b1-a67e-b0fbdcdb9c0b","I" "305fa1c5-f082-40b8-8dbc-82b0322fe0b5","J" ''' headers = {'Content-Type': 'text/csv'} params = {'key': mockaroo_api_key, 'filename': 'customer.csv'} response = requests.post(url, params=params, headers=headers, data=csv_data) print(response.status_code) print(response.text)
关键修正点:
- 移除
MultipartEncoder和uuid相关代码,直接将CSV字符串作为请求体发送。 - 设置正确的
Content-Type: text/csv请求头,告知API请求内容格式。 - 移除CSV内容中逗号后的空格(可选,符合标准CSV格式,避免潜在解析问题)。
上传后,Mockaroo上的数据集将显示纯CSV内容,可正常用于schemas配置。
内容的提问来源于stack exchange,提问作者dazed_and_confused
相关产品推荐
相关产品推荐

