Python-对具有动态值的列表中的每个项目发送请求

时间:2018-09-09 07:01:34

标签: python loops python-requests

我目前正在与UPS Package Tracking API一起使用,以通过POST请求发送跟踪号,该API接收并发送回有关包裹信息的JSON响应。

当前,我只是使用几个嵌套的字典来处理单个跟踪号值的实际请求,但似乎无法弄清楚如何使它每次发送具有不同跟踪号的请求。

以下代码:

trk = ["tracknbr1", "tracknbr2", "tracknbr3"]

data = {"UPSSecurity" : {
        "UsernameToken" : {
            "Username" : nme,
            "Password" : pwd
        },
        "ServiceAccessToken" : {
            "AccessLicenseNumber" : aln
        },
    },
    "TrackRequest" : {
        "Request" : {
            "RequestOption" : 1,
            "TransactionReference" : {
                "CustomerContext" : ""
            },
        },
        "InquiryNumber" : trk
    }
    }

req = requests.post("https://wwwcie.ups.com/rest/Track", json=data)
print (req.text)

查询编号”是跟踪编号存储在请求中的位置。

(很抱歉,如果显示的大部分代码对于该问题都是不必要的,以为这会使我的问题更容易理解。)

所以,现在它只发送对列表中第一项的请求,然后打印出响应。

我正在尝试找到一种方法,使请求遍历列表中的每个项目,每次发送带有下一个跟踪号的请求。

我用for循环尝试了几种不同的方法,但是我无法让它遍历列表中每个请求的实际值。

可能没有一个明显的解决方案,因为我或多或少只是从Python开始的。让我知道你们的想法。

1 个答案:

答案 0 :(得分:0)

在示例中,您正在将trk变量用于其他用途(分别用于list和单个InquiryNumber)。

import requests


nme = 'your_username'
pwd = 'your_password'
aln = 'your_accesslicensenumber'

tracking_numbers = ["tracknbr1", "tracknbr2", "tracknbr3"]

for trk in tracking_numbers:
    data = {"UPSSecurity" : {
            "UsernameToken" : {
                "Username" : nme,
                "Password" : pwd
            },
            "ServiceAccessToken" : {
                "AccessLicenseNumber" : aln
            },
        },
        "TrackRequest" : {
            "Request" : {
                "RequestOption" : 1,
                "TransactionReference" : {
                    "CustomerContext" : ""
                },
            },
            "InquiryNumber" : trk
        }
        }

    response = requests.post("https://wwwcie.ups.com/rest/Track", json=data)
    print(response.json())