You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 

53 lines
1.6 KiB

import { IncomingMessage } from "http"
import { fetch } from "bun"
import https from "https"
import fs from "fs"
const maxNum = 3
function request(opts: any, cb: any, num = 0) {
https.get(opts, function (res: IncomingMessage) {
if (res.statusCode === 302) {
if (num > maxNum) {
console.error("重定向次数超过三次,已强制终止");
return
}
let url = new URL(res.headers['location']!)
if (url) {
console.log(`重定向:`, url.href);
num++
// 重定向
request({
...opts,
hostname: url.hostname,
path: url.pathname + url.search,
}, cb, num)
}
} else if (res.statusCode === 200) {
cb && cb(res)
} else {
console.log(`当前${opts.hostname}请求${opts.path}未成功`, res.statusCode);
// res.on('data', (d) => {
// process.stdout.write(d);
// });
}
})
}
// 会重定向,需要想重定向请求
request({
hostname: "api.zzzmh.cn",
path: "/v2/bz/v3/getUrl/1b87e2c5880511ebb6edd017c2d2eca211",
headers: {
'Accept': '*/*',
'Accept-Encoding': 'gzip, deflate',
// "User-Agent": getRandomUserAgent(),
// 'Connection': 'keep-alive',
'Referer': 'https://bz.zzzmh.cn/'
}
}, function (res: IncomingMessage) {
const write = fs.createWriteStream("./a.jpg")
res.pipe(write)
write.on("error", function (err) {
console.log(err)
})
})