Запрос Get-Record-API больше не работает - PullRequest
0 голосов
/ 10 февраля 2020

с прошлой недели API-конечная точка Get-Record больше не работает. Пожалуйста, посмотрите фрагмент node.js и скриншот в конце.

Получение списка ключей в магазине работает (первый запрос). Но получение записей приводит к хаосу (второй запрос). Это тот же результат, если добавить explizit 'Accept-Encoding: gzip'. Не могли бы вы подтвердить?

Cheers Wulfgäääng

const request = require('request-promise-native');
const storeUrl = 'https://api.apify.com/v2/key-value-stores/z9UOmIgYF7oMxXkGS/';

(async () => {

    var results = await request({uri: `${storeUrl}keys`, json: true});
    console.log('Keys:');
    console.dir(results);

    results = await request({uri: `${storeUrl}records/testkey`, json: true});
    console.log('Record:');
    console.dir(results);

})();

Screenshot

Ответы [ 2 ]

0 голосов
/ 10 февраля 2020

отлично, это работает.

К сожалению, я не использую node.js для своих целей (местный сторожевой таймер). Я использую Autohotkey, который использует Windows 'WinHttpRequest.5.1' (см. Ниже).

Знаете ли вы, кто должен вызывать 'WinHttpRequest.5.1' с помощью декодирования 'gzip'? 'Accept-Encoding: gzip' также не работает (см. Ниже).

Cheers Wulfgäääng

storeUrl := "https://api.apify.com/v2/key-value-stores/z9UOmIgYF7oMxXkGS/"

whr1 := ComObjCreate( "WinHttp.WinHttpRequest.5.1")
whr1.Open("GET", storeUrl . "keys", true)
whr1.SetRequestHeader("Accept-Encoding", "gzip")
whr1.Send()
whr1.WaitForResponse()
response := whr1.ResponseText

whr2 := ComObjCreate( "WinHttp.WinHttpRequest.5.1")
whr2.Open("GET", storeUrl . "records/testkey", true)
whr2.SetRequestHeader("Accept-Encoding", "gzip")
whr2.Send()
whr2.WaitForResponse()
response := whr2.ResponseText
0 голосов
/ 10 февраля 2020

Вы правы, ответ возвращает сжатое тело. Это проблема API Apify. Вы можете принудительно установить заголовки gzip, используя параметр gzip: true в вашем запросе, например:

EDIT: это было исправлено на сайте Apify. Вам также необходимо добавить параметр disableRedirect = true для запроса URL.

const request = require('request-promise-native');
const storeUrl = 'https://api.apify.com/v2/key-value-stores/z9UOmIgYF7oMxXkGS/';

(async () => {

    var results = await request({uri: `${storeUrl}keys`, json: true, resolveWithFullResponse: true});
    console.log('Keys:');
    console.dir(results.headers);

    results = await request({uri: `${storeUrl}records/testkey?disableRedirect=true`, json: true, gzip: true });
    console.log('Record:');
    console.dir(results.headers);

})();
...