Ошибка UrlFetchApp.fetch (), кажется, не использует заголовки - PullRequest
1 голос
/ 12 мая 2019

Попытка получить данные с веб-сайта с помощью Google Apps Script, чтобы поместить их непосредственно в электронную таблицу.Выборка, кажется, не работает, где запросы Python эквивалентно работает просто отлично.

Код Python:

page = requests.get("someurl?as_data_structure", headers={'user-agent':'testagent'})

Код GAS:

var page = UrlFetchApp.fetch("someurl?as_data_structure", headers={'user-agent':'testagent'});

Единственныйтребуемый заголовок - это пользовательский агент, а ошибка, которую я получаю из кода GAS, - это то, что я обычно получаю из кода Python, если бы я не включил заголовок.Я новичок в js, но, насколько я знаю, это правильный способ сделать это ..?

РЕДАКТИРОВАТЬ: Теперь получил заголовки в нужном месте, но проблема остается, точно такая же ошибка, как и раньше.

var options = {"headers": {"User-Agent": "testagent"}};
var page = UrlFetchApp.fetch("someurl?as_data_structure", options);

Ответы [ 2 ]

1 голос
/ 12 мая 2019

Google не всегда раскрывает свои ограничения (раздражает?).Одним из таких ограничений является изменение пользовательского агента.Он установлен на

"User-Agent": "Mozilla/5.0 (compatible; Google-Apps-Script)"

Вы не можете его изменить.

Образец теста:

function testUrlFetchAppHeaders() {
  var options = {
    headers: {
      'User-Agent':
        'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.103 Safari/537.36',
    },
  };
  var fakeRequest = UrlFetchApp.getRequest(
    'https://www.httpbin.org/headers',
    options
  );//providing fake assurance
  var realRequest = UrlFetchApp.fetch(
    'https://www.httpbin.org/headers',
    options
  );//like a wrecking ball
  Logger.log({ fake: fakeRequest, real: realRequest });
}

Образец ответа:

{
  "fake": {
    "headers": {
      "User-Agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.103 Safari/537.36"
    },
    "method": "get",
    "payload": "",
    "followRedirects": true,
    "validateHttpsCertificates": true,
    "useIntranet": false,
    "contentType": null,
    "url": "https://www.httpbin.org/headers"
  },
  "real": {
    "headers": {
      "Accept-Encoding": "gzip,deflate,br",
      "Host": "www.httpbin.org",
      "User-Agent": "Mozilla/5.0 (compatible; Google-Apps-Script)"
    }
  }
}

getRequest (url)

Возвращает запрос, который будет выполнен, если была вызвана операция.

Этот метод фактически не выдает запрос.

Также точно не возвращается запрос, который будет сделан.

0 голосов
/ 12 мая 2019

headers относятся к опциям:

var options = {"headers": {"User-Agent": "testagent"}};
var page = UrlFetchApp.fetch("someurl?as_data_structure", options);
...