zoukankan      html  css  js  c++  java
  • nodejs 发起请求

    一、request 发起请求

    文档参考地址

    1. 示例

    普通 get 请求

    const http = require('http')
    
    let req =  http.request('https://www.baidu.com', res => {
        let data = ''
        // data 事件可能触发多次
        res.on('data', chunk => {
            data += chunk
        })
        res.on('end', () => {
            console.log('请求的数据 :>> ', data)
        })
    })
    // http.request 必须手动调用 req.end 来表示请求结束,才能收到返回的数据
    // 否则程序一直处于等待、挂起状态
    req.end()
    

    post 请求

    const http = require('http')
    const querystring = require('querystring')
    
    // 序列化数据
    const postData = querystring.stringify({
        'key': 'value'
    })
    
    // 请求参数
    const options = {
        hostname: 'www.baidu.com',
        port: 80,
        path: '/upload', // 此处需以 / 开头
        method: 'POST',
        headers: {
            'Content-type': 'application/x-www-form-urlencoded',
            'Content-Length': Buffer.byteLength(postData)
        }
    }
    let req =  http.request(options, res => {
        let data = ''
        console.log('状态码:', `${res.statusCode}`)
        console.log('响应头:', `${JSON.stringify(res.headers, null, 4)}`)
        res.on('data', chunk => {
            data += chunk
        })
        res.on('end', () => {
            console.log('请求的数据 :>> ', data)
        })
    })
    req.on('error', e => {
        console.log('请求发生错误:', e)
    })
    // 将数据写入主体,即 body 里面
    req.write(postData)
    req.end()
    

    2. 语法说明

    /*
     * 发起请求
     * @param url {string | URL |} 请求的 url 地址
     * @param options {Object | integer}
     *          agent {http.Agent | boolean}, 控制 Agent 的行为。可能的值有:
     *              undefined(默认): 对此主机和端口使用 http.globalAgent
     *              Agent 对象: 显示的使用传入的 Agent
     *              false: 使用新建的具有默认值的 Agent
     *          auth {string} 基本的身份验证, 即 'user:password',用户计算授权请求头
     *          createConnection {Function} 当 agent 选项为被使用时,用来为请求生成套接字或流。
     *          defaultPort {number} 协议的默认端口。若使用 Agent,则默认值为 agent.defaultPort, 否则为 undefined
     *          family {number} 当解析 host 或者 hostname时使用的 IP 地址族。有效值为 4 或 6。如果没有指定,则同时使用 IP v4 和 v6
     *          headers {Object} 包含请求头的对象
     *          host {string} 请求的服务器域名或者 IP 地址,默认值为 'localhost'
     *          hostname {string} host 的别名。如果同时指定 host 和 hostname,则使用 hostname
     *          insecureHTTPParser {boolean} 使用不安全的 HTTP 解析器,为 true 时,可以接受无效的 HTTP 请求头,默认值为 false
     *          localAddress {string} 为网络连接绑定的本地接口
     *          lookup {Function} 自定义的查看函数。默认值为 dns.lookup()
     *          maxHeaderSize {number} 可选的,重写此服务器接收的请求的 --max-http-header-size 值,即请求头的最大长度(以字节为单位)。
     *              默认值: 16384(16KB)
     *          method {string} 指定 HTTP 请求的方法,默认值:'GET'
     *          path {string} 请求的路径。应包括查询字符串(如果有的话)。例如:'/index.html?page=12'。 默认值为 '/'
     *          port {number} 远程服务器的端口。默认值:defaultPort(如果有设置的话) 或者 80
     *          protocol {string} 使用的协议。 默认值: 'http:'
     *          setHost {boolean} 指定是否自动添加 Host 请求头。 默认值 true
     *          socketPath {sring} Unix 域套接字。如果指定了 host 或 port 之一(他们指定了 TCP 套接字),则不能使用该项
     *          timeout {number} 指定套接字超时的数值,以毫秒为单位。在套接字被连接之前设置超时
     * @param callback {Function} 回调函数
     *          res {IncomingMessage} 请求返回的对象,包含返回的数据、状态码、地址、方法等
     */
    http.request(url[, options][, callback])
    http.request(options[, callback])
    

    备注:

    1. 同时指定 urloptions ,两者会进行合并,以 options 属性优先

    2. callback 会作为单次监听器(即只执行一次)被添加到 'response' 事件

    3. 使用 http.request 时,必须始终调用 req.end() 来表示请求的结束。

    4. 发送 'Connection: keep-alive' 会通知 Node.js 与服务器的连接应该持续到下一个请求

    5. 发送 'Content-Length' 请求头会禁用默认的分开编码

    6. 发送授权请求头会使用 auth 选项覆盖以计算基本的身份验证


    二、get 发起请求

    文档参考地址

    功能和参数与 http.request 类似,只是请求方法始终设置为 GET

    1. 示例

    const http = require('http')
    // 不需要手动调用 req.end()
    let req = http.get('http://www.baidu.com', res => {
        let data = ''
        res.on('data', chunk => {
            data += chunk
        })
        res.on('end', () => {
            console.log('请求的数据 :>> ', data)
        })
    })
    req.on('error', e => {
        console.log('请求发生错误 :>> ', e)
    })
    

    2. 语法说明

    /*
     * 发起 GET 请求
     *
     * @param url {string | URL} 请求地址
     * @param options {Object}  接受与 http.request 相同的 options,且 method 始终设置为 GET。从原型继承的属性将被忽略
     * @param callback {Function} 
     *      res {IncomingMessage} 请求返回的对象,包含返回的数据、状态码、地址、方法等
     */
    http.get(url[, options][, callback])
    http.get(options[, callback])
    

    备注:

    1. http.gethttp.request 的唯一区别在于 http.get 将请求方法设置为 GET 并自动调用 req.end()

    2. 如果传递了 callback 参数,添加了 response 处理函数(没有添加处理函数,响应将被完全废弃),
      需要消费完响应对象中的数据才能释放这段数据所占内存,并且触发 end 事件;添加 'data' 事件处理函数,或者调用 res.resume() 方法等即可消费数据

    const http = require('http')
    
    let req= http.get('http://www.baidu.com', res => {
        const { statusCode } = res
        
        let error
    
        if (statusCode !== '0') {
            console.log('请求失败,状态码为:', statusCode)
            res.resume()
            return
        }
    
        let data = ''
        res.on('data', chunk => {
            data += chunk
        })
        res.on('end', () => {
            console.log('请求的数据 :>> ', data)
        })
    })
    
  • 相关阅读:
    10.12在主函数中输入10个等长的字符串。用另一个函数对它们排序,然后在主函数输出这10个已排好序的字符串。
    10.10 将一个5×5的矩阵中最大的元素放在中心,4个角分别放在4个最小的元素(按从左到右,从上到下的顺序,依次从小到大存放),写一个函数实现之,并用main函数调用。
    10.9 写一个函数,将一个3*3的整型矩阵转置。
    10.8输入一行文字,找出其中大写字母、小写字母、空格、数字及其他字符各有多少?
    10.4 有n个整数,使前面各数顺序向后移m个位置,最后m个数变成前面m个数,见图。写一函数:实现以上功能,在主函数中输入n个数和输出调整后的n个数。
    10.5 有n人围成一圈,顺序排号。从第1个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来的第几号的那位。
    10.3 输入10个整数,将其中最小的数与第一个数对换,把最大的数与最后一个数对换。写三个函数;①输入10个数;②进行处理;③输出10个数。
    PHP中文无乱码写法
    教你怎样搜索下载百度网盘、华为网盘、迅雷快传的资源
    Yii框架的安装
  • 原文地址:https://www.cnblogs.com/linjunfu/p/12910497.html
Copyright © 2011-2022 走看看