Как сделать запрос POST с помощью библиотеки Google Chrome Puppeteer? - PullRequest
0 голосов
/ 04 июня 2018

Good Day All, я пытаюсь сделать запрос POST, используя библиотеку Chrome без головы кукловода.Я не могу заставить работать приведенный ниже код.

    // Get csrf token
    let token = await page.evaluate(() => document.querySelector('[name="CSRFToken"]').value);

    let postResponse = await page.evaluate(async(token, cookies) => {    

    let response = fetch("/loyalty/points", {
          method : 'POST',
          cookie : cookies,
          postData : 'CSRFToken=' + token,      
        }).then(response => response.text()).catch(error => console.log(error));

        return response;

      });

      console.log('Final response');
      console.log(postResponse);

Я продолжаю получать сообщение об ошибке, что токен CSRF не установлен или cookie недействителен.

У меня вопрос, использую ли я правильный метод в кукловоде, чтобы сделатьПочта?Если да, могу ли я выполнить какую-либо отладку, чтобы увидеть фактический отправленный POST-запрос?

Я ценю любые советы или помощь.Спасибо

1 Ответ

0 голосов
/ 04 июня 2018

Вы не создаете тело запроса: следовательно, ошибка.Атрибут postData, установленный вами для объекта запроса, не является каким-либо известным атрибутом, поэтому он также не будет установлен для запроса, то есть сервер никогда не увидит ваш токен CSRF.Вы должны посмотреть в MDN документы по fetch () .

Я полагаю, что у вас все будет хорошо, просто заменив postData на body, но это трудно понять без доступа к вашей конечной точке.Мы знаем, что для этого могут потребоваться специальные заголовки.

Учитывая, что вы публикуете только обычные данные формы (что подразумевается под вашим кодом key=value), я бы также начал использовать объекты FormData, предоставленные вашим браузером.чтобы избежать ручного кодирования деталей реализации.

const formData = new FormData();

formData.append("CSRFToken", token);

const response = fetch("/loyalty/points", {
      method : 'POST',
      cookie : cookies,
      body   : formData,
      headers : {
        'cookie' : cookies,
        /* other headers you need, possibly content-type (see below) */
      },   
    }).then(response => response.text()).catch(error => console.log(error));

    return response;
  });

Предостережение: при использовании API FormData всегда будет устанавливаться content-type данных на multipart/form-data.Если ваш сервер по какой-либо причине не поддерживает эту кодировку, и вам нужно использовать application/x-www-form-urlencoded ( см. Здесь разницу ), вы не можете вслепую изменить Content-Type: вам также нужно url кодирует содержимое .

Для отладки я бы просто использовал обычный экземпляр Chrome, чтобы увидеть это.Вы должны быть в состоянии выполнить код там и увидеть сетевые запросы в DevTools (где сразу будет заметно, что вы POST пустой запрос).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...