我有一个小问题,我的请求从https://readnovelfull.com/beauty-and-the-beast-wolf-hubby-xoxo/chapter-1-i-would-not-be-responsible.html
获得html为例。
我可以在其他url上获得所有的html,例如novel detalj, latest upgated等。
但当我得到章节的详细信息时,就没有了。
我在postman
和https://codebeautify.org/source-code-viewer
上测试了这些url,并且在获取它存在于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与postman和其他网站得到的不一样。
好吧,我在网站上做了一些研究,这就是我得出的结论。
网站需要X-CSRF-TOKEN
,我能够提取这些并找到这些值
const csrf = 'x09Q6KGqJOJJx2iHwNQUa_mYfG4neV9EOOMsUBKTItKfNjSc0thQzwf2HvCR7SQCqfIpC2ogPj18jG4dQPgVtQ==';
const id = 774791;
我需要用上面的值发送一个请求到https://readnovelfull.com/ajax/increase-chapter-views
。这将返回true/false
现在我试图在我的fetch调用之后加入csrf
,但它仍然是相同的旧数据。
任何想法,如果我做错了什么?
看起来您的CORS有问题。为了确保,只需尝试通过cors代理发送请求。一种快速的方法是添加前缀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,您需要找出如何在您的具体情况下解决它。
Reproducable例子:
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环境之间没有区别。