Используйте javascript для написания сценариев оболочки (3) для инициирования сетевых запросов.

внешний интерфейс JavaScript

"Это 8-й день моего участия в августовском испытании обновлений.Подробности о событии:Испытание августовского обновления"

Это третья статья о написании шелл-скриптов на javascript, ссылки на предыдущие статьи следующие:

В этой статье в основном рассказывается о том, как инициировать сетевой запрос.

Для инициирования сетевых запросов в основном используется инструмент 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.
  • Скопировать информацию об интерфейсе

image.png

Затем начните писать код, поместите интерфейс для получения списка в функцию, если вам нужно изменить параметры, вы можете передать параметры для изменения в качестве параметров функции

#!/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)
    })
}())

Вывод такой, как показано в консоли:

image.png

Общий процесс относительно прост.После получения данных вы можете выполнить некоторую обработку данных.Например, вы можете подсчитать ключевые слова, которые появляются во всех статьях.

После того, как сетевой запрос может быть инициирован в сценарии, мы можем сделать много вещей, например

  • Сканирование некоторых обоев веб-сайта
  • Сканирование некоторых ответов от Zhihu
  • Просканируйте некоторые данные и организуйте их в лист Excel
  • Скрипт для автоматической регистрации

Чуть позже напишу каштаны.