将Excel/VBA转换为Python
我在这里找到了一个Excel/VBA脚本,正在尝试将其转换为Python。首先是VBA,然后是我的Python尝试。我应该如何修复Python代码将Excel/VBA转换为Python,python,excel,vba,Python,Excel,Vba,我在这里找到了一个Excel/VBA脚本,正在尝试将其转换为Python。首先是VBA,然后是我的Python尝试。我应该如何修复Python代码 Public Function GetUPSDeliveryDate(ByVal id As String) As String Dim body As String, json As Object body = "{""Locale"":""en_US"",&
Public Function GetUPSDeliveryDate(ByVal id As String) As String
Dim body As String, json As Object
body = "{""Locale"":""en_US"",""TrackingNumber"":[""" & id & """]}"
With CreateObject("MSXML2.XMLHTTP")
.Open "POST", "https://www.ups.com/track/api/Track/GetStatus?loc=en_US", False
.setRequestHeader "Referer", "https://www.ups.com/track?loc=en_US&requester=ST/"
.setRequestHeader "User-Agent", "Mozilla/5.0"
.setRequestHeader "DNT", "1"
.setRequestHeader "Content-Type", "application/json"
.setRequestHeader "Accept", "application/json, text/plain, */*"
.send body
Set json = JsonConverter.ParseJson(.responseText)
End With
我的尝试是:
def f(tn):
data = {"Locale":"en_US",
"TrackingNumber":f"[{tn}]",
"Referer": "https://www.ups.com/track?loc=en_US&requester=ST/",
"User-Agent": "Mozilla/5.0",
"DNT": "1",
"Content-Type": "application/json",
"Accept": "application/json, text/plain, */*"}
r = requests.post("https://www.ups.com/track/api/Track/GetStatus?loc=en_US", data=data)
print(r.json())
我猜一个问题是将VBA中的
主体部分
放入数据中
对。Locale和TrackingNumber是数据的一部分。其他所有内容都是请求头
def f(tn):
data = {"Locale":"en_US",
"TrackingNumber":f"[{tn}]"}
headers = {
"Referer": "https://www.ups.com/track?loc=en_US&requester=ST/",
"User-Agent": "Mozilla/5.0",
"DNT": "1",
"Content-Type": "application/json",
"Accept": "application/json, text/plain, */*"}
r = requests.post("https://www.ups.com/track/api/Track/GetStatus?loc=en_US", data=data, headers=headers)
print(r.json())
对。Locale和TrackingNumber是数据的一部分。其他所有内容都是请求头
def f(tn):
data = {"Locale":"en_US",
"TrackingNumber":f"[{tn}]"}
headers = {
"Referer": "https://www.ups.com/track?loc=en_US&requester=ST/",
"User-Agent": "Mozilla/5.0",
"DNT": "1",
"Content-Type": "application/json",
"Accept": "application/json, text/plain, */*"}
r = requests.post("https://www.ups.com/track/api/Track/GetStatus?loc=en_US", data=data, headers=headers)
print(r.json())
正如@Tim Roberts的回答所说的,现在您正在POST数据中包含所有标题。它们应该作为标题单独传递。正如@Tim Roberts的回答所说,现在您将所有标题都包含在POST数据中。它们应该作为标题单独传递。谢谢。唉,我得到了一个拒绝访问的错误,但这似乎是原始代码的问题(我还没有测试)。谢谢。唉,我得到了一个拒绝访问的错误,但这似乎是原始代码的问题(我还没有测试)。