Я немного поигрался с сетью, но столкнулся с проблемой, которую не могу понять;Используя сервер nodejs (на моем локальном компьютере), я не могу получить сообщение об ошибке разрешения, запрещающее мне доступ к данным.Что меня больше всего смущает, так это то, что при использовании расширения chrome «Почтальон» я не сталкиваюсь с ошибками разрешений, но использую код, сгенерированный почтальоном, (как и с изменением собственного кода).
Нужно ли использовать живой сервер?Нужно ли включать в заголовки некоторые дополнительные элементы, которые не помещаются там почтальоном?Есть ли какой-то уровень безопасности вокруг API, который по какой-то причине у Postman есть доступ, который недоступен для локальной машины?
Будет полезен любой свет, который можно пролить.Обратите внимание, что нет общедоступной документации API-интерфейса SmithsFoodAndDrug (которую я могу найти), поэтому не обязательно использовать APIKeys.Но тот факт, что Почтальон может получить доступ к информации, заставляет меня думать, что я должен иметь возможность на сервере узла без какой-либо специальной настройки аутентификации.
В заключение:
- Я ищув информации о продукте SmithsFoodAndDrug и нашел API, из которого они получают информацию.
- Я выяснил, какие заголовки нужны для получения локальной информации о ценах на продукты (поверх формата тела json для запроса POST)
- Используя почтальон, я могу сгенерировать запрос POST и получить желаемые результаты API
- Используя nodejs (и код, сгенерированный почтальоном для репликации запроса) с модулем 'request' и стандартным 'http'модуль запроса модуля Я получаю ошибки разрешения от сервера.
Подробности: (предположим, сбор данных о яблоках honeycrisp (0000000003283) с идентификатором деления 706 и идентификатором хранилища 00144)
- http://www.smithsfoodanddrug.com/products/api/products/details
- Заголовками являются «идентификатор подразделения» и «идентификатор магазина».Тело имеет формат {"upcs": ["XXX"], "filterBadProducts": false}, где XXX - это код конкретного продукта.
Вот Заголовки запроса в почтальоне.Вот настройки Тело запроса в почтальоне.Ниже приведен фрагмент ответа json (именно это я и хочу).
{"products": [
{
"brandName": null,
"clickListItem": true,
"countryOfOrigin": "Check store for country of origin details",
"customerFacingSize": "price $2.49/lb",
...
"calculatedPromoPrice": "2.49",
"calculatedRegularPrice": "2.99",
"calculatedReferencePrice": null,
"displayTemplate": "YellowTag",
"division": "706",
"minimumAdvertisedPrice": null,
"orderBy": "Unit",
"regularNFor": "1",
"referenceNFor": "1",
"referencePrice": null,
"store": "00144",
"endDate": "2018-09-19T00:00:00",
"priceNormal": "2.55",
"priceSale": "2.12",
"promoDescription": "About $2.12 for each",
"promoType": null,
...
"upc": "0000000003283",
...
}
],
"coupons": {},
"departments": [],
"priceHasError": false,
"totalCount": 1 }
При использовании кода, переданного почтальоном для репликации запроса, я получаю сообщение об ошибке:У вас нет разрешения для доступа "http://www.smithsfoodanddrug.com/products/api/products/details" на этом сервере. Ссылка # 18.1f3de93f.1536955806.1989a2b1. '.
// Code given by postman
var request = require("request");
var options = { method: 'POST',
url: 'http://www.smithsfoodanddrug.com/products/api/products/details',
headers:
{ 'postman-token': 'ad9638c1-1ea5-1afc-925e-fe753b342f91',
'cache-control': 'no-cache',
'store-id': '00144',
'division-id': '706',
'content-type': 'application/json' },
body: { upcs: [ '0000000003283' ], filterBadProducts: false },
json: true };
request(options, function (error, response, body) {
if (error) throw new Error(error);
console.log(body);
});