fetch()如何读取请求中的`user-agent`?

作者:J.sky · 发表于:
2023-05-15T10:50:53.000000Z
· 更新于:
2023-08-13T23:10:22.645292Z
· Tag: JavaScript fetch request

之前写了一个node的脚本,用来检测博客的友情链接是否互换成功,通过fetch()采集对方网站友情链接页面的HTML代码,搜索是否含有自己的博客域名来判断是否互换。但是运行了几次脚本发现其中一个网站页面无法打开的状态,后来发邮件询问大体说是被反爬虫给屏蔽了,考虑到自己的简陋的代码并没有处理反爬虫的这个情况,于是修改代码加入了headers中的'user-agent'伪装。

但是添加后我想测试一下看看请求中headers是否添加了fetch()如何读取请求中的'user-agent'?,本来希望打印response中的herders来查看'user-agent'是否伪装成功,直接在fetch的response中遍历headers是无法获得'user-agent'这个属性。所以只好搭建一个临时服务器端来打印请求的request。

解决方法

我是通过Python fastAPI创建了一个简单的服务器,然后使用fetch发送请求,在服务器端打印request的headers中的'user-agent',这次,可以看到'user-agent'的属性被添加了。服务端的具体代码:

import uvicorn
from fastapi import FastAPI,Response,Request
app = FastAPI()
@app.get("/")
async def root(request:Request):
    print(request.headers['user-agent'])
    return {"message": "Hello World"}
if __name__ == '__main__':
    uvicorn.run(app='main:app', host="127.0.0.1", port=8888, reload=True, )

node的请求代码很简单:

fetch(url, )
        .then(res => {
            // console.log(res);
            return res.text()})
        .catch((e) => {
            console.error(`错误: ${e.message}`);
        });

这样问题就解决了,直接在fetch的response中遍历headers是无法获得'user-agent'这个属性。