ReactJS fetch api 中缺少用户代理错误

User Agent missing error in ReactJS fetch api

提问人:Neeraj-Kumar-Coder 提问时间:6/28/2022 最后编辑:VLAZNeeraj-Kumar-Coder 更新时间:7/23/2022 访问量:1176

问:

我在 ReactJS 中使用新闻 API 通过 fetch API 获取新闻

代码片段

const url = `https://newsapi.org/v2/top-headlines?country=in&category=${this.props.category}&pageSize=${this.state.pageSize}&page=${this.state.page}`;
let data = await fetch(url);

但是当我在本地主机上运行它时,它给出了一个错误 400 说:

{status: 'error', code: 'userAgentMissing', message: 'Please set your User-Agent header to identify your application. Anonymous requests are not allowed.'}

当我在 Stack Overflow 上搜索相同的内容时,我在这里得到了一个类似问题的链接:

向 API 发出 get 请求时出现用户代理缺失错误

然后我在 fetch API 的参数中添加了标头:User-Agent

代码片段

headers = new Headers({
        "X-Api-Key": this.apiKey,
        "User-Agent": navigator.userAgent
    });
const url = `https://newsapi.org/v2/top-headlines?country=in&category=${this.props.category}&pageSize=${this.state.pageSize}&page=${this.state.page}`;
let data = await fetch(url, {
            headers: this.headers
        });

但它仍然显示相同的错误:

{status: 'error', code: 'userAgentMissing', message: 'Please set your User-Agent header to identify your application. Anonymous requests are not allowed.'}

此错误要求在请求标头中输入“User-Agent”,但它已经存在!当我查看 chrome 浏览器的网络部分时。

Screenshot of the network section of chrome

那么,问题到底出在哪里?以及如何解决这个问题?

javascript reactjs http-headers fetch-api

评论


答:

1赞 rcart 7/23/2022 #1

我也有类似的问题。到目前为止,我已经能够从Mozilla开发人员网站传入一个Web浏览器User-Agents。

function webCall(url,method,headers,postBody,callBack){

   /* build options */
   var options = {
       method: method,
       uri: url, 
       headers: 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36 Edg/91.0.864.59',
       body: postBody
   }
   ...
};

这仍在开发中;但是,我能够从我的 newsapi.org 拉中返回结果。

编辑:作为参考,我正在使用旧的“请求”npm 库(遗留要求)。所以我是这样提出我的要求的:

request(options, function handleResponse(err, response, body){
   var errMessage = null;
   var headers = {};
   
   if(err) {
      errMessage='HTTP ERROR: ' + err;
   }
   else {
      headers = response.headers;
      if(response.statusCode!=200){
         errMessage='HTTP ' + response.statusCode + ' ERROR: ' + err;
      }
   }
});

评论

0赞 Neeraj-Kumar-Coder 7/23/2022
那么我怎样才能从链接中获取数据。你能给我看一个示例代码吗(就像问题中写的代码一样)。我无法从你的回答中弄清楚该怎么做。