Странный лимит на пакетное VIN-декодирование NHTSA через WinHTTPRequest

Я сталкиваюсь с проблемой (HTTP STATUS 400 Bad Request), использующей код для декодирования VIN, если я отправляю более 12, но если я отправляю список из более 100 путем вставки на сайт, я получаю результаты.

Я использую следующий код для отправки списка VIN, чтобы получить информацию от вин-декодера NHTSA ( 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, поэтому вполне возможно, что я делаю действительно глупую ошибку.

1 ответ

Решение

Ваш запрос недействителен, потому что ваш VINXзначения не имеют ключа (DATA).

Вы можете убедиться в этом, используя инструменты разработчика в своем браузере при тестировании примера ссылки. В Firefox (другие похожи) вам нужен Net->Log включен в Consoleинструментов разработчика, то вы можете увидеть данные, отправленные на POST

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"
Другие вопросы по тегам