В предыдущих статьях я сосредоточился на создании сервера Node.js для обработки HTTP-запросов. Эта статья рассматривает проблему в обратном порядке, показывая вам, как делать HTTP-запросы из ваших приложений Node.js. Вы можете спросить себя, почему вы хотите это сделать. Сразу приходят на ум два приложения — просмотр веб-страниц и проксирование . Скребки — это части программного обеспечения, которые загружают веб-страницы и программно извлекают из них информацию. Прокси-серверы выступают в качестве посредников, перенаправляя клиентские запросы на другие серверы и возвращая ответы.
Модуль запроса
Самый простой способ создания HTTP-запросов в Node.js — использовать модуль request
. Написанный Mikeal Rogers request
позволяет вам выполнять все типы HTTP-запросов, включая GET
, POST
, PUT
и DELETE
. Его гибкость делает модуль request
идеальным для взаимодействия с RESTful API . Вы можете установить request
используя следующую команду npm .
запрос установки npm
После того как вы установили request
, создайте новый файл Node.js, содержащий код, показанный ниже. Первая строка примера используется для импорта request
в программу. Сделать HTTP-запрос так же просто, как вызвать функцию request()
. В этом примере мы делаем запрос на загрузку домашней страницы JSPro. Второй аргумент request()
— это, конечно, функция обратного вызова.
var request = require("request"); request("http://www.sitepoint.com", function(error, response, body) { console.log(body); });
Функция обратного вызова request()
принимает три аргумента — error
, response
и body
. Как следует из названия, error
содержит информацию о любых проблемах, возникших во время HTTP-запроса. Аргументом response
является объект, содержащий различные данные, возвращаемые при вызове, включая код состояния, заголовки и многое другое. Третий аргумент обратного вызова, body
, является телом ответа. В предыдущем примере body
содержало исходный код домашней страницы JSPro.
Модуль request
также может быть объединен с модулем файловой системы для потоковой передачи HTTP-запросов к файлам и от них. В следующем примере снова выбирается JSPro. Однако вместо отображения исходного кода в консоли он записывается в файл с именем «jspro.htm».
var request = require("request"); var fs = require("fs"); request("http://www.sitepoint.com").pipe(fs.createWriteStream("jspro.htm"));
Параметризация запросов
Предыдущие примеры создавали простые запросы GET
для URL. Однако мы можем изменить HTTP-запрос, передав объект конфигурации в качестве первого аргумента request()
. В следующем примере используется более мощный синтаксис для повторной загрузки JSPro. Обратите внимание на многочисленные параметры конфигурации. Параметры uri
и method
указывают request
на отправку запроса GET
в JSPro.
var request = require("request"); request({ uri: "http://www.sitepoint.com", method: "GET", timeout: 10000, followRedirect: true, maxRedirects: 10 }, function(error, response, body) { console.log(body); });
Параметр timeout
указывает request
на ожидание ответа в 10 000 миллисекунд (десять секунд) перед тем, как отказаться. Последние два параметра относятся к следующим перенаправлениям. Многие страницы выполняют перенаправления за кулисы без ведома пользователя. Параметры followRedirect
и maxRedirects
предписывают request
выполнить до десяти перенаправлений HTTP 3 xx . Также обратите внимание, что request()
поддерживает много других параметров, которые здесь не показаны.
Отправка данных формы
Как упоминалось ранее, request
поддерживает не только запросы GET
. Одной из наиболее распространенных операций является отправка данных формы с использованием запроса POST
. В следующем примере используется параметр form
request()
для отправки имени пользователя как части POST
. Затем страница PHP отвечает, приветствуя пользователя по имени.
var request = require("request"); request({ uri: "http://www.cjihrig.com/development/php/hello_form.php", method: "POST", form: { name: "Bob" } }, function(error, response, body) { console.log(body); });
Работа с Cookies
Многие сайты отслеживают различные взаимодействия пользователей с помощью файлов cookie . Файлы cookie — это небольшие фрагменты данных, которые передаются между клиентом и сервером при каждой транзакции HTTP. Чтобы облегчить использование файлов cookie, request
предоставляет методы jar()
и cookie()
. Отдельные куки создаются методом cookie()
. В строке 3 следующего примера создается файл cookie, в котором указывается имя пользователя. Затем cookie-файл добавляется в jar-файл cookie, созданный в строке 2. Когда выполняется HTTP-запрос, параметр jar
используется для отправки jar-файла cookie на сервер.
var request = require("request"); var jar = request.jar(); var cookie = request.cookie("name=John"); jar.add(cookie); request({ uri: "http://www.cjihrig.com/development/php/hello_cookies.php", method: "GET", jar: jar }, function(error, response, body) { console.log(body); });
Когда ответ будет получен, пользователь будет приветствоваться как Джон, имя хранится в файле cookie. Баночка печенья также обновляется с любыми изменениями, внесенными сервером. Если вы распечатаете банку с cookie до и после запроса, вы увидите, что сервер изменил значение куки с "John"
на "Stranger"
. Один и тот же файл cookie может передаваться последовательным HTTP-запросам, чтобы имитировать взаимодействие реального пользователя с сайтом.
Вывод
В этой статье представлен простой, но мощный модуль request
. Поскольку эта статья не является исчерпывающей, я рекомендую хотя бы просмотреть документацию, чтобы узнать, что еще может сделать request
. Следите за новостями о предстоящей статье, которая более подробно расскажет о поиске в Интернете.
И если вам понравилось читать этот пост, вы полюбите Learnable ; место, чтобы узнать новые навыки и приемы у мастеров. Участники получают мгновенный доступ ко всем электронным книгам SitePoint и интерактивным онлайн-курсам, таким как Jump Start JavaScript .
Комментарии к этой статье закрыты. У вас есть вопрос о JavaScript? Почему бы не спросить об этом на наших форумах ?