首页 > 解决方案 > 反应本机获取未获得与邮递员相同的内容

问题描述

我对从https://readnovelfull.com/beauty-and-the-beast-wolf-hubby-xoxo/chapter-1-i-would-not-be-responsible.html示例获取 html 的请求有一点问题。

我可以在其他 url 上获取所有 html,例如小说 detalj、最新更新等。

但不是当我得到章节的细节时。

我也测试了这些网址,postman并且https://codebeautify.org/source-code-viewer在获取它在 div 下存在的章节的内容时没有问题#chr-content

所以我现在有点迷茫,我做错了什么?

这是我在其他小说网站上工作的 fetch 调用。

  static async getHtml(
    url: string
  ): Promise<HTMLDivElement> {
    console.log(`Sending html request to ${url}`);
    var container = parse('<div>test</div>') as any;
    try {
      let headers = new Headers({
        Accept: '*/*',
        'User-Agent':
          'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.141 Safari/537.36'
      });

      var data = await fetch(url, {
        method: 'GET',
        headers: headers,
      });
      if (!data.ok) {
        const message = `An error has occured:${data.status}`;
        console.log(message);
      } else {
        var html = await data.text();
        console.log('Data is ok. proceed to parse it');
        container = parse('<div>' + html + '</div>') as any;
      }
    } catch (e) {
      console.log(e);
    }
    return container as HTMLDivElement;
  }

我应该提到,我没有得到任何错误,只是我得到的 html 与邮递员和其他网站得到的不同。

更新

好的,所以我在网站上做了一些研究,这就是我想出的。

该网站需要X-CSRF-TOKEN,我能够提取这些并找到这些值

const csrf = 'x09Q6KGqJOJJx2iHwNQUa_mYfG4neV9EOOMsUBKTItKfNjSc0thQzwf2HvCR7SQCqfIpC2ogPj18jG4dQPgVtQ==';
const id = 774791;

我需要https://readnovelfull.com/ajax/increase-chapter-views使用上述值向其发送请求。这将发回true/false

现在我试图csrf在我的 fetch 调用之后加入,但它仍然是相同的旧相同的无数据。

任何想法,如果我做错了什么?

标签: javascriptreact-nativefetch

解决方案


看起来您对 CORS 有疑问。为了确保只是尝试通过cors proxy发送请求。您可以快速做到这一点的一种方法是添加前缀 URL:

https://cors-anywhere.herokuapp.com/https://readnovelfull.com/beauty-and-the-beast-wolf-hubby-xoxo/chapter-1-i-would-not-be-responsible.html`

注意:不建议在生产中使用此 CORS 代理,因为它不安全

如果在那之后你会收到数据,那意味着你遇到了 CORS,你需要弄清楚如何在你的具体情况下解决它。

可重现的例子:

const parse = (str) => str;

const getHtml = async (url) => {
    console.log(`Sending html request to ${url}`);
    var container = parse('<div>No content =(</div>')
    try {
      let headers = new Headers({
        Accept: '*/*',
        'User-Agent':
          'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.141 Safari/537.36'
      });
      var data = await fetch(url, {
        method: 'GET',
        headers: headers,
      });
      if (!data.ok) {
        const message = `An error has occured:${data.status}`;
        console.log(message);
      } else {
        var html = await data.text();
        console.log('Data is ok. proceed to parse it');
        container = parse('<div>' + html + '</div>');
      }
    } catch (e) {
      console.log(e);
    }
    return container;
  }

getHtml('https://cors-anywhere.herokuapp.com/https://readnovelfull.com/beauty-and-the-beast-wolf-hubby-xoxo/chapter-1-i-would-not-be-responsible.html').then(htmlContent => document.querySelector('div').innerHTML = htmlContent);
<div>loading...</div>

如果没有帮助,请提供一个可重现的 RN 示例,但我相信在这种情况下 RN 和 Web 环境之间没有区别。


推荐阅读