Как в гет запросе в качестве параметра передать url адрес целиком?

Поддержка
  • @uraabk Ну, в целом вы правы. Лично у меня проблемы возникают в основном тогда, когда не до конца понимаешь в чем именно проблема и что конкретно надо загуглить. Плюс тут еще любят через Китай отправить решать то, что решается одной строчкой)

  • @allive Ой, вы как чувствовали))

  • @senerg Для передачи параметров в get-запросе содержащих спецзнаки, используют метод encodeURIComponent(). Сайт для наглядности.

    Ссылки будут выглядеть примерно так:

    exec?p1=https%3A%2F%2Fwww.aliexpress.com%2Fitem%2FUSLION-Phone-Case-For-iPhone-7-6-6s-Plus-5-5s-SE-Simple-Solid-Color-Ultrathin%2F32808065488.html
    

    да вроде пропускает... и пробелы пропускает, и спецсимволы... А я где-то видео смотрел, что все русское надо кодировать. Ничего не понимаю, но гугл скрипт исправил пока работает.

    Попробуйте передать скрипту url с параметрами:

    exec?p1=https://www.google.ru/search?q=site%3Acommunity.bablosoft.com+здесь+могла+бы+быть+ваша+реклама&oq=site%3Acommunity.bablosoft.com+здесь+могла+бы+быть+ваша+реклама
    

    Я вам до этого уже говорил, что данные в таблицу лучше передавать post-запросом. Это позволит без перекодирования передать большое количество данных одним запросом.


    Гугл скрипт и ява скрипт я тоже толком не знаю, но это не мешает мне нагуглить все, что надо.

    Значит вопросов о методе encodeURIComponent() мы от вас не увидим?


  • @fox said in Как в гет запросе в качестве параметра передать url адрес целиком?:

    Попробуйте передать скрипту url с параметрами

    Передалось:

    0_1540540934027_fa0aadfd-bc16-4252-8560-63c23ccec0fc-image.png

    Поэтому не понятна вообще цель кодирования.

    @fox said in Как в гет запросе в качестве параметра передать url адрес целиком?:

    Я вам до этого уже говорил, что данные в таблицу лучше передавать post-запросом.

    Можете поделиться ссылкой на пример того как это делается, я с post запросами еще не сталкивался?

    @fox said in Как в гет запросе в качестве параметра передать url адрес целиком?:

    Это позволит без перекодирования передать большое количество данных одним запросом.

    Что значит большое количество данных? У меня передается урл, название поста и пара-тройка маленьких переменных. Имеет ли смысл это через пост запросы оформлять?

  • @fox , Нашел все таки что не работает. В строке гет запроса в басе написано это:

    "https://script.google.com/macros/s/.../exec?p1=writeTitle&p2=" + [[URL]] + "&p3=" + [[PIC_A]] + "&p4=" + [[PIC_B]] + "&p5=" + [[TITLE]]
    

    Выбран expression. Все значения переменных в басе определяются правильно. А возвращается это:

    Error 400 (Bad Request)
    

    Когда я беру эту же строчку, вставляю ее в браузер и вручную заменяю переменные, копируя их из баса, то возвращает все как надо "success". Или открываю анализ трафика в бас, проверяю отправленный урл: все правильно. Копирую этот урл из отправленных баса в браузер... Приходит опять "success" и записывается все куда нужно. Оказывается это все из-за пробелов, которые у меня есть в переменной [[TITLE]]. При чем обычный браузер и с пробелами все нормально отрабатывает, а бас с пробелами выдает ошибку 400.

  • @senerg

    При чем обычный браузер и с пробелами все нормально отрабатывает, а бас с пробелами выдает ошибку 400.

    Потому что браузер уже давно экранирует всё автоматом. Но в запросах эта автоматика не нужна, бывают разные ситуации, под которые нужно кодировать строку по разному.

  • @fox Можете поделиться примером с пост запросом?

  • @fox said in Как в гет запросе в качестве параметра передать url адрес целиком?:

    Я вам до этого уже говорил, что данные в таблицу лучше передавать post-запросом

    Записываю вроде как надо:

    https://script.google.com/macros/s/.../
    
    {
      "p1": "writeTitle",
      "p2": [[URL]],
      "p3": [[PIC_A]],
      "p4": [[PIC_B]],
      "p5": [[TITLE]]
    }
    
    application/json
    

    Но все равно не работает, что не так?

  • @senerg POST запросы победил! Всем спасибо.

  • @senerg said in Ошибка с базой данных:

    @cacats знаю только как использовать google sheets для работы с таблицами, базами в БАСе не пользовался.

    Учитывая, что в той теме лично вас не спрашивали и вы не знали ответ на нужный вопрос, значит просто хотели похвастаться :D. Думаю пользователи бы лучше оценили мануал по использованию google sheets в BAS, даже в общих чертах.

  • @fox , перед кем мне тут хвастаться, что за глупость? Я же не знаю целей человека, если ему подходят google sheets я бы рассказал.
    Мануал простой:

    1. Делаем JSON объект с необходимыми данными в БАСе.
    {
      "p1": [[URL]],
      "p2": [[PIC_A]],
      "p3": [[PIC_B]],
      "p4": [[TITLE]]
    }
    
    1. Этому объекту делаем JSON.stringify, полученный результат вставляем в тело пост запроса. В url пишем:
    https://script.google.com/macros/s/.../exec?p1=write
    

    выбираем application/json.
    3. В скрипте гугл пишем функцию:

    function doPost(e){
      if (e.parameter.p1 == "write") {
        return write(e);
      }
    }
    function write(e) {
      var parsedJson = JSON.parse(e.postData.contents);
    }
    

    И делаем все что хотим с данными, которые теперь находятся в объекте parsedJson. Если нужно вернуть данные в БАС, то снова создаем JSON объект:

    var dataObject = [];
    var rows = sheet.getRange("A2:E5").getValues();
    
    for (var i = 0; i < rows.length; i++) {
      var dataRow = rows[i];
      var record = {};
      record['url'] = dataRow[0];
      record['pic_a'] = dataRow[1];
      record['pic_b'] = dataRow[2];
      record['title'] = dataRow[3];
      record['title2'] = dataRow[4];
      dataObject.push(record);
    }
    

    и дописываем к функции write это:

    return ContentService.createTextOutput(JSON.stringify(dataObject[0])).setMimeType(ContentService.MimeType.JSON);
    

    подставив туда нужное значение.