微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在不同的请求中获取相同的 html body

如何解决在不同的请求中获取相同的 html body

我在同一个 URL 上多次调用 HTTP 请求。但每次我得到一个不同的身体。这背后的原因是什么。我该怎么办?

main() async {
  for (var i = 0; i < 10; i++) {
    print(await getBody('https://google.com'));
  }
}

Future<String> getBody(String lyricsUrl) async {
  final response = await http.get(Uri.parse(lyricsUrl));
  return response.body.length.toString();
}

Here is the output

解决方法

基本上你打印的是从请求中获得的完整文本的长度。因此,这包括很多内容,例如:网站的 html 代码,其中包括页面正文、页面上的其他文本、js 函数等。对于您提出的每个请求,这些都是相同的。但该请求还返回一组参数,如 KEI、KEXPI 字符串,它们是 windows.google 脚本的一部分。

因此,如果您尝试打印完整的请求文本而不是单独打印长度,您会观察到类似下面的内容,其值对于不同的请求是不同的。因此,这是导致不同请求长度不同的原因。

window.google={kEI:\'dzPQYPiJ4fs6rTzssOTwAk\',kEXPI:\'0,772215,1,52320,56873,954,5105,206,4804,2316,383,246,5,23,5250,16232,10,1106274,1197730,522,31,328984,51224,16114,28684,17572,4859,1361,9290,3027,3891,13691,4020,978,13228,3847,10622,1141,7509,2,276,4516,2778,919,5081,885,710,1277,2212,530,149,1943,6297,108,3406,606,2023,1777,520,12370,603,2624,1989,856,7,5599,6755,5096,7539,338,4928,3407,908,231,2614,2397,1027,6441,3277,3,576,1014,54423,5990,5333,991,1661,4,1528,2304,1236,5803,74,1983,2626,2015,1300,2767,7434,3824,3050,2658,872,3291,80,56,462,2595,13628,2305,639,7079,10535,665,2521,3261,2575,2047,17,3121,6,3541,14710,1814,283,38,351,517,5992,6754,432,552,4788,1394,1498,35,1273,1715,3037,20,483,1534,3244,297,147,1067,33,1343,1461,3271,626,158,254,494,1454,923,93,545,1784,115,1159,1076,262,2834,406,2091,1606,1975,287,1678,445,595,1160,2292,775,1628,2003,176,37,1228,756,1526,230,4420,519,204,75,50,895,1368,138,2205,116,54,269,16,1448,320,2005,61,531,619,223,168,256,207,87,233,341,156,700,79,339,1220,683,590,188,657,533,461,18,304,113,332,192,270,5629329,194,32,63,155,59,5996289,47,2800650,2382,444,1796,9,2551,889,795,561,4265,1331,3299,843,2609,13,72,139,169,19,46,39,96,548,29,353,422,91,114,43,14,25,8,23952292,4010273,268,1835,26467,2374,120,2340,540\',kBL:\'bsXf\'};

简而言之,响应文本涉及各种其他动态值以及网站上的静态数据。所以长度因请求而异。 请随意添加您仍然有任何疑问的评论或支持我的答案,以便它有用..

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。