Другая страница при получении страницы с Python или Curl - PullRequest
1 голос
/ 07 февраля 2020

Я переписываю программное обеспечение с 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>

Когда я делаю то же самое в 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. Чем это можно объяснить?

1 Ответ

2 голосов
/ 07 февраля 2020

Сервер, кажется, просматривает поле 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.

...