javascript - 反应本机获取未获得与邮递员相同的内容
问题描述
我对从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 调用之后加入,但它仍然是相同的旧相同的无数据。
任何想法,如果我做错了什么?
解决方案
看起来您对 CORS 有疑问。为了确保只是尝试通过cors proxy发送请求。您可以快速做到这一点的一种方法是添加前缀 URL:
注意:不建议在生产中使用此 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 环境之间没有区别。
推荐阅读
- html - 反恶意软件/反垃圾邮件软件触发的电子邮件中的链接
- javascript - 数字序列,循环不适用于所选输入
- kubernetes - 有没有一种简单的方法可以在 kubernetes pod 容器上禁用 linux 日志?
- arrays - 尝试使用 PowerShell 将 CSV 中的每一行和每一列乘以 100 或 100
- macos - 在 macos 上的 odoo.conf 上添加额外的插件作为插件的额外路径
- xml - XML 文件中的“数据库”结构
- java - 在 ItemClickListener 调用方法之后
- html - A Frame Image 显示平面
- django - 我可以在 Django Admin“添加”页面上自动过滤选项吗?
- javascript - 如何计算一个单词中的字符?