UrlFetchApp не подключается к общедоступному URL - PullRequest
0 голосов
/ 07 декабря 2018

Я пытаюсь получить данные с этого веб-сайта, используя ссылку для загрузки CSV, расположенную в разделе Действия> Загрузить> CSV

https://app.udot.utah.gov/apex/eom/f?p=288:300

Я получаю ошибку 302 в строке UrlFetchApp последовательнои я не понимаю почему.Я запустил регистратор с httpexception и получил ошибку, что он не может подключиться к серверу.Веб-сайт общедоступен и доступен независимо от сети, поэтому мне трудно понять, что происходит.URL, кажется, загружает CSV при вводе вручную, но я не могу заставить UrlFetchApp захватить его.

var EquipUrl = "https://app.udot.utah.gov/apex/eom/f?p=288:300:::CSV";
var EquipContent = UrlFetchApp.fetch(EquipUrl).getContentText();
var EquipData = Utilities.parseCsv(EquipContent);

Любая помощь будет оценена!

Я только что попробовал следующее в предложении в комментарияхи имел тот же результат ошибки 302.Я также попытался установить перенаправления на false, и это продолжается и заканчивается пустым массивом EquipData

var options = {
'followRedirects' :true
];
var EquipUrl = "https://app.udot.utah.gov/apex/eom/f?p=288:300:::CSV::::";
var EquipContent = UrlFetchApp.fetch(EquipUrl, options).getContentText();
var EquipData = Utilities.parseCsv(EquipContent);

Спасибо за помощь TheMaster!Я сказал в своем комментарии, что код выплевывал ошибку в строке файлов cookie var, но эта ошибка исправилась, поэтому я думаю, что это была неверная копия вашего кода с моей стороны.Проблема в том, что в последней строке Logger выдается ошибка «Не удалось разобрать текст».

function fetchUrlWithCookie() {
  var url = 'https://app.udot.utah.gov/apex/eom/f?p=288:300:::CSV';
  var response = UrlFetchApp.fetch(url, {
    muteHttpExceptions: true,
    followRedirects: false,
  });
  var cookie = response.getAllHeaders()['Set-Cookie'];
  response = UrlFetchApp.fetch(url, {
    muteHttpExceptions: true,
    headers: {
      Cookie: cookie, //send the cookie we got as header
    },
  });
  Logger.log(Utilities.parseCsv(response.getContentText()));//parseCSV
}

Я пробовал несколько разных вариантов, например, пытался войти в систему, прежде чем посмотреть, смогу ли я что-нибудь найти.Есть ли какая-нибудь информация, которую я мог бы извлечь из регистрации в Stackdriver, которая могла бы помочь выявить проблемы?

Огромное спасибо TheMaster!Это сработало!Я был бы рад, если бы вы прокомментировали и рассмотрели процесс решения вашей проблемы, чтобы я мог помочь узнать, что нужно искать в следующий раз, когда это произойдет, но я знаю, что это требует много.

  var url = 'https://app.udot.utah.gov/apex/eom/f?p=288:300::CSV::::';
  var response = UrlFetchApp.fetch(url, {
    muteHttpExceptions: true,
    followRedirects: true,
  });
  var cookie = response.getAllHeaders()['Set-Cookie']; 
  response = UrlFetchApp.fetch(url, {
    muteHttpExceptions: true,
    headers: {
      Cookie: cookie, //send the cookie we got as headerw
    },
  });
  Logger.log(Utilities.parseCsv(response.getContentText()));//parseCSV

Это копия кода, которая полностью функционирует.Еще раз спасибо за вашу помощь в течение этого нескольких дней для решения этой проблемы.

1 Ответ

0 голосов
/ 07 декабря 2018

Ключевые моменты:

Некоторые веб-сайты используют cookies для поддержания состояния, сеанса и выполнения запроса.Поскольку urlFetch работает на стороне сервера, а не в браузере, файлы cookie не поддерживаются во всех запросах.Тем не менее, мы можем вручную получить cookie в первом запросе и отправить его в последующих запросах.

Фрагмент кода:

function fetchUrlWithCookie() {
  var url = 'xxxx'; //Your csv url
  var response = UrlFetchApp.fetch(url, {
    muteHttpExceptions: true,
    followRedirects: false,
  });
  var cookie = response.getAllHeaders()['Set-Cookie']; //Get cookie from header 
  response = UrlFetchApp.fetch(url, {
    muteHttpExceptions: true,
    headers: {
      Cookie: cookie, //send the cookie we got as header
    },
  });
  Logger.log(Utilities.parseCsv(response.getContentText()));//parseCSV
}

Ссылки:

...