我正在将一个软件从 Python 重写为 Go,在请求以 iso-8859-1
编码的页面时遇到一些问题。
此代码正在运行:
r = requests.get("https://www.bger.ch/ext/eurospider/live/de/php/aza/http/index.php?lang=de&type=show_document&print=yes&highlight_docid=aza://27-01-2016-5A_718-2015")
r.encoding = 'iso-8859-1'
file = open('tmp_python.txt', 'w')
file.write(r.text.strip())
file.close()
最后几行是:
<script type="text/javascript">
var imgLoad = imagesLoaded( document.body );
imgLoad.on( 'always', function( instance ) {
window.print( );
} );
</script>
</html>
当我这样做时the same in Go ,最后几行是:
</body>
</html>
我认为问题出在 Go 中。然后我使用curl
获取资源,我也得到了错误的结果。因此,我认为问题出在其他地方。
我的浏览器获取了预期的文档。所以我添加了一个用户代理:
curl -A "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:59.0) Gecko/20100101 Firefox/59.0" https://www.bger.ch/ext/eurospider/live/de/php/aza/http/index.php?lang=de&type=show_document&print=yes&highlight_docid=aza://27-01-2016-5A_718-2015
我的浏览器像 Python 脚本一样获取预期的页面。 curl
和 Go 脚本都不是这种情况。什么可以解释这一点?
最佳答案
服务器似乎会查看请求 header 的User-Agent
字段来决定要服务器的内容。当进行一些简单的伪造时,您会得到与 Python 和浏览器相同的内容:
client := &http.Client{}
req, err := http.NewRequest("GET", link, nil)
req.Header.Add("User-Agent","Mozilla/5.0")
resp, err := client.Do(req)
在执行您建议的curl 命令时,我也会得到此内容,至少在正确引用 URL 之后是这样。
关于python - 使用 Python 或 Curl 获取页面时出现不同的页面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60116566/