"Это 8-й день моего участия в августовском испытании обновлений.Подробности о событии:Испытание августовского обновления"
Это третья статья о написании шелл-скриптов на javascript, ссылки на предыдущие статьи следующие:
- javascript написать сценарий оболочки одну базовую операцию
- javascript написать сценарий оболочки 2 выполнить команду linux
В этой статье в основном рассказывается о том, как инициировать сетевой запрос.
Для инициирования сетевых запросов в основном используется инструмент curl с открытым исходным кодом, который имеет функции, аналогичные postman, и используется для построения сетевых запросов, получения и обработки данных.
Сначала познакомьтесь с основным использованием curl, если вы его использовали, вы можете его пропустить.
Основное использование завитка
Посмотреть ответы
# 查看网页源代码
curl www.baidu.com
# 查看响应头和网页源代码
curl -i www.baidu.com
# 只查看响应头
curl -I www.baidu.comn
Создайте HTTP-запрос
HTTP-запрос включает в себя:
-
строка запроса
- Глагол HTTP (метод) -X
-
заголовок запроса -H
- Content-Type указывает тип данных для отправки
-
тело запроса
- -d
Укажите HTTP-метод
# -X指定HTTP方法(动词),默认是GET
curl -X POST www.baidu.com
curl -X DELETE www.baidu.com
отправлять различные типы данных
Параметр -H добавляет заголовки HTTP-запроса. Параметр -d используется для отправки тела данных запроса POST.
Content-Type : application/x-www-form-urlencoded
# -d发送请求体数据 默认的Content-Type为`application/x-www-form-urlencoded`
curl -X POST -d 'userPhoneNumber=15064761673' example.com/user
# -d会自动将请求转化为POST,所以-X POST可以省略
curl -d 'userPhoneNumber=15064761673' example.com/user
# 可以读取本地文本文件的数据,向服务器发送
curl -d '@data.txt' example.com/user
Content-Type: multipart/form-data
# -F参数用来向服务器上传二进制文件
curl -F 'file=@photo.png' <https://google.com/profile>
-
Content-Type:application/json- H добавить заголовок запроса
curl -d '{"login": "emma", "pass": "123"}' -H 'Content-Type: application/json' <https://google.com/login>
загрузить файл
- o Сохранение ответа сервера в файл, эквивалентный команде wget
# 格式:
curl -o 文件名 www.baidu.com
# 示例
curl -o sina.html www.baidu.com
# 可以和其他参数组合使用,例如只下载响应头
curl -o sina_res_header.txt -I www.baidu.com
- O сохранить ответ сервера в виде файла и использовать последнюю часть URL-адреса в качестве имени файла
curl -O <https://www.baidu.com/img/dong_66cae51456b9983a890610875e89183c.gif>
Используйте curl для инициирования сетевых запросов в скриптах
Например, если я хочу получить данные статьи, рекомендованные домашней страницей Nuggets, выполните следующие действия:
- Откройте сеть и посмотрите, какой интерфейс вызывает домашняя страница Nuggets.
- Скопировать информацию об интерфейсе
Затем начните писать код, поместите интерфейс для получения списка в функцию, если вам нужно изменить параметры, вы можете передать параметры для изменения в качестве параметров функции
#!/usr/bin/env node
const shell=require('shelljs')
// 获取数据
function fetchList(){
return `
curl 'https://api.juejin.cn/recommend_api/v1/article/recommend_all_feed' \
-H 'authority: api.juejin.cn' \
-H 'pragma: no-cache' \
-H 'cache-control: no-cache' \
-H 'sec-ch-ua: "Chromium";v="92", " Not A;Brand";v="99", "Google Chrome";v="92"' \
-H 'sec-ch-ua-mobile: ?0' \
-H 'user-agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.131 Safari/537.36' \
-H 'content-type: application/json' \
-H 'accept: */*' \
-H 'origin: https://juejin.cn' \
-H 'sec-fetch-site: same-site' \
-H 'sec-fetch-mode: cors' \
-H 'sec-fetch-dest: empty' \
-H 'referer: https://juejin.cn/' \
-H 'accept-language: zh-CN,zh;q=0.9,en;q=0.8,zh-TW;q=0.7' \
-H 'cookie: _ga=GA1.2.151728167.1605962485; n_mh=QqqO9vdPyoUgGdMUK7bmzGg_3PdkxHeXQjID5mYHilk; MONITOR_WEB_ID=f9b5a304-d583-464d-ac25-bd0fc1849132; passport_csrf_token_default=6ae74227ec74685add0271300bf1f275; passport_csrf_token=6ae74227ec74685add0271300bf1f275; sid_guard=5d56b314e811199a40ac8d4a1a03774b%7C1627264731%7C5184000%7CFri%2C+24-Sep-2021+01%3A58%3A51+GMT; uid_tt=df38a08a79a50cfc2bde3f330d5cef2c; uid_tt_ss=df38a08a79a50cfc2bde3f330d5cef2c; sid_tt=5d56b314e811199a40ac8d4a1a03774b; sessionid=5d56b314e811199a40ac8d4a1a03774b; sessionid_ss=5d56b314e811199a40ac8d4a1a03774b; _gid=GA1.2.1703676324.1627819267; _tea_utm_cache_2608={%22utm_source%22:%2220210803%22%2C%22utm_medium%22:%22Push%22%2C%22utm_campaign%22:%2231day%22}' \
--data-raw '{"id_type":2,"client_type":2608,"sort_type":3,"cursor":"0","limit":20}' \
--compressed
`
}
;(function(){
shell.exec(fetchList(),{silent:true},(code,stdout)=>{
if(code!==0)throw new Error('调用接口失败')
console.log(stdout)
})
}())
Вывод такой, как показано в консоли:
Общий процесс относительно прост.После получения данных вы можете выполнить некоторую обработку данных.Например, вы можете подсчитать ключевые слова, которые появляются во всех статьях.
После того, как сетевой запрос может быть инициирован в сценарии, мы можем сделать много вещей, например
- Сканирование некоторых обоев веб-сайта
- Сканирование некоторых ответов от Zhihu
- Просканируйте некоторые данные и организуйте их в лист Excel
- Скрипт для автоматической регистрации
Чуть позже напишу каштаны.