代码之家  ›  专栏  ›  技术社区  ›  Advenn

如何用python向visa-api发送请求

  •  0
  • Advenn  · 技术社区  · 2 年前

    我试图用python请求向visa-api发送post请求。 我成功地通过了签证开发者中心的游乐场,它正在发挥作用。但是用python做这件事不起作用。
    我的代码:

    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),
                      data=json.dumps(request_body),
                      timeout=10
                      )
    

    回应:

    b'{"timestamp":"2024-07-11T06:09:10.260+00:00","status":415,"error":"Unsupported Media Type","path":"/CDISI_VBASS/services/v1/binFileTransfer"}'
    

    我做错了什么,我还不知道。
    这是发送请求的正确方式吗?我在网上找不到关于这个主题的任何有效来源

    2 回复  |  直到 2 年前
        1
  •  1
  •   newlearner    2 年前

    “不支持的媒体类型”错误(HTTP状态代码415)表示服务器拒绝请求,因为 Content-Type 请求的内容与预期不符。对于Visa API,您可能需要设置 内容类型 标题到 application/json 当发送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,
        headers=headers,
        cert=(client_cert, client_key),
        auth=(user_id, password),
        data=json.dumps(request_body),
        timeout=10
    )
    
    print(r.text)
    

    标题词典包括 Content-Type: application/json 通知服务器请求正文位于 JSON 总体安排

        2
  •  1
  •   Advenn    2 年前

    它奏效了。我尝试添加标题,但它导致了其他错误。发布后,我再次搜索,并在chatgpt的帮助下,最后只需将其添加为标题即可

    headers = {
        'Content-Type': 'application/json',
        "Accept": "application/json"
    }
    
    推荐文章