使用Python向Visa API发送POST请求出现415错误的问题排查
解决Visa API POST请求返回415 Unsupported Media Type问题
你的问题出在请求的Content-Type头部未正确设置,Visa API期望接收application/json格式的请求体,但你的代码没有明确指定这个头部,导致服务器无法识别请求体格式,返回415错误。
修复方案一(推荐):使用requests的json参数
requests库的json参数会自动将字典序列化为JSON字符串,同时自动设置Content-Type: application/json头部,无需手动处理序列化和头部:
import requests url = "https://sandbox.api.visa.com/filedeliveryservice/v1/binFileTransfer" request_body = { "requestHeader": { "requestTS": "2017-02-15T22:05:00.000", "requestMessageId": "testAnna" }, "requestData": {"fileName": "VBASS_TR_LEVEL3_03262024_3.csv"} } r = requests.post(url, cert=(client_cert, client_key), auth=(user_id, password), json=request_body, timeout=10 )
修复方案二:手动设置Content-Type头部
如果坚持使用data参数,需要手动添加请求头部,明确告知服务器请求体为JSON格式:
import requests import json url = "https://sandbox.api.visa.com/filedeliveryservice/v1/binFileTransfer" request_body = { "requestHeader": { "requestTS": "2017-02-15T22:05:00.000", "requestMessageId": "testAnna" }, "requestData": {"fileName": "VBASS_TR_LEVEL3_03262024_3.csv"} } headers = {"Content-Type": "application/json"} r = requests.post(url, cert=(client_cert, client_key), auth=(user_id, password), data=json.dumps(request_body), headers=headers, timeout=10 )
为什么Playground能成功?
Visa开发者中心的Playground会自动帮你添加正确的请求头部(包括Content-Type: application/json),而你的代码中缺少这一步,因此出现格式不兼容的错误。
内容的提问来源于stack exchange,提问作者Advenn
相关产品推荐
相关产品推荐

