首页 > 解决方案 > 在不同的请求中获取相同的 html 正文

问题描述

我在同一个 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();
}

这是输出

标签: httpdartnetworkingget

解决方案


基本上,您要打印的是从请求中获得的完整文本的长度。所以,这包括很多东西,比如:网站的 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,108,3407,908,2,231,2614,2397,1027,6441,
3277,3,576,1014,1,54423,149,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,31,13628,2305,639,7079,10535,665,2521,3261,2575,2047,2047,
17,3121,6,908,3,3541,1,14710,1814,283,38,351,2,1,3,517,5992,6754,
432,552,4788,2,1394,1498,35,1273,1715,2,3037,20,483,1534,3244,297,
10,147,1067,3,33,3,1343,1461,3271,626,158,254,494,1454,923,93,545,
2,1784,115,1159,1076,262,2834,406,2091,1606,1784,1975,287,1678,2,
445,595,1160,2292,775,1628,2,2003,176,37,1228,756,1526,2,230,206,
4420,519,2,338,204,3,75,50,895,1368,138,2205,116,246,54,269,54,16,
1448,320,2005,61,531,619,223,168,74,262,256,207,87,1,233,341,552,
156,700,2,2,5,79,339,1220,683,590,188,657,2,1,533,461,18,6,304,113,
332,192,270,5629329,194,32,63,155,2,59,5996289,520,47,2800650,2382,
444,1,2,80,1,1796,1,9,2,2551,1,889,795,2,561,1,4265,1,1,2,1331,3299,
843,2609,155,17,13,72,139,4,2,20,2,169,13,19,46,5,39,96,548,29,2,
2,1,2,1,2,2,7,4,1,2,2,2,2,2,2,353,422,91,5,114,43,14,25,43,2,1,4,
1,10,8,1,23952292,4010273,268,1835,26467,2,2374,3,120,3,6,338,3,
2340,74,540\',
kBL:\'bsXf\'};

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


推荐阅读