curl 和 nodejs http.get 结果不一致
如图,同一个 http get 请求,nodejs 中 504,而直接 curl 是 OK 的
应该怎么修改 js 代码?
const httpx = {
get: (url, opt) => new Promise((resolve, reject) => {
ski(url.match(/^(https?):\/{2}/)?.[1], { http, https }, ski.f(() => {
reject(`Unknown protocol.\nURL: ${url}"`)
})).get(url, opt ?? {}, res => {
if (res.statusCode !== 200) {
res.resume()
reject(res.statusCode)
}
const headers = Object.fromEntries(res.rawHeaders.map((v, k, a) =>
k & 1 ? undefined : [ v, a[k + 1] ]).filter(i => i))
const charset = headers["Content-Type"].match(/charset=(.+)$/)?.[1] ?? "utf-8"
const gzipped = headers["Content-Encoding"] === "gzip"
const bh = new BufferH()
res.on("data", chunk => bh.concat(chunk))
res.on("end", async() => {
let bf = bh.toBuffer()
if (gzipped) bf = zlib.gunzipSync(bf)
resolve(iconv.decode(bf, charset))
})
}).on("error", reject)
})
}
测试地址:
http://www.ibiqu.net/
,这个网站用了 gbk 和 gzip,上面的代码已经解决了这两项问题。主页是可以正常获取到内容的。测试代码:httpx.get("http://www.ibiqu.net/")
http://www.ibiqu.net/book/49086/20588967.htm
但是这个路径就会 504,无论是我包装的方法还是直接用https
都不行。curl 表现正常。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
nodejs设置userAgent没有,加上userAgent再试试