python - 使用 Python 或 Curl 获取页面时出现不同的页面

标签 python http curl iso

我正在将一个软件从 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/

相关文章:

python - 管理 Mac OS 在 Windows 环境中使用非 ASCII 字符创建的文件名?

Python HTML 解析器

java - cz.msebera.android.httpclient.client.HttpResponseException : Unauthorized

php - 如何使用 php curl 获取网页并显示该网页 html?

javascript - 在 Openload 上获取唯一的下载链接

python - python 在 for 循环中效率低得令人难以置信,还是只是我的代码?

python - 安装 Numpy 和 Scipy - 找不到系统 python 2.6

C# HttpWebRequest to Socket 写入Request Stream延迟3秒

C++ 从 HTTP 响应中获取图片

java - 如何在 Android 中将 cURL 发送到 REST 服务