通过 WinHTTPRequest 对 NHTSA 批量 VIN 解码的奇怪限制

Weird limit on NHTSA batch VIN decode via WinHTTPRequest

如果我发送超过 12 个 VIN,我会遇到一个问题(HTTP 状态 400 错误请求)使用代码解码 VIN,但如果我通过粘贴到网站发送超过 100 个的列表,我会得到结果。

我正在使用以下代码发送 VIN 列表以从 NHTSA vin 解码器获取信息(https://vpic.nhtsa.dot.gov/api/,批量解码 VIN(平面格式)

request = "VIN1;VIN2;VIN3; ...?format=xml"  <- just example to show format of data

Set http = New WinHTTP.WinHttpRequest
http.settimeouts 30000,30000,30000,30000
http.open "POST","https://vpic.nhtsa.dot.gov/api/vehicles/DecodeVinValuesBatch", False
http.SetRequestHeader "Content-Type", "text/plain"
http.send request

response = http.ResponseText 

我认为这可能是一些长度限制,所以我尝试将内容长度设置为要发送的字符串的长度,但这似乎没有帮助。我搜索了很多,但找不到任何可以解释的特别内容。我想 NHTSA 可能对可以发回的内容有限制,但由于我可以手动将列表粘贴到网站上并获得没有多大意义的结果。它以这种方式提供相同的 XML 格式的数据。我不确定还能尝试什么,所以希望其他人会有其他想法。我是 WinHTTPRequest 的新手,所以我很可能犯了一个非常愚蠢的错误。

您的请求无效,因为您的VINX值没有键(DATA)。

您可以在测试您的示例时使用浏览器上的开发人员工具看到这一点 link。在 Firefox 中(其他类似)你需要在 Console 的开发工具中打开 Net->Log,然后你可以看到 POST[=19 上发送的数据=]

Rawdata:
DATA=5UXWX7C5*BA%2C2011%3B+5YJSA3DS*EF+&format=XML

根据这个你的请求字符串应该是:

request = "DATA=VIN1;VIN2;VIN3; ...&format=xml" ' Post array elements are separated by &

您的内容类型:

http.SetRequestHeader "Content-Type", "application/x-www-form-urlencoded"