1

Тема: JS: Get запрос

Функция делающая https Get запрос на сайт социальной сети "Вконтакте" возвращает зашифрованный текст, вместо содержимого html странички.


function sendGet(Url, cookie){
var xhr = new ActiveXObject("WinHttp.WinHttpRequest.5.1")
xhr.open("GET", Url, false)
xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded')
xhr.setRequestHeader("Accept-Charset","utf8")
xhr.setRequestHeader('User-Agent', "Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.1) Gecko/2008071615 Fedora/3.0.1-1.fc9 Firefox/3.0.1")
xhr.setRequestHeader('Accept', 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8')
xhr.setRequestHeader('Accept-Language', 'ru-RU,ru;q=0.8,en-US;q=0.5,en;q=0.3')
xhr.setRequestHeader('Accept-Encoding', 'gzip, deflate, br')
xhr.setRequestHeader('cookie', cookie)
xhr.setRequestHeader('Connection','keep-alive')
xhr.setRequestHeader('Upgrade-Insecure-Requests','1')
xhr.send()
if (xhr.Status == 200)
{
  var txt = xhr.responseText
  return txt
}
return ""
}

Необходимо получить ответ не зашифрованным.
Пример использования функции -

var Text = sendGet("https://vk.com/dos4gw",cookie)

2

Re: JS: Get запрос

Почитайте об устанавлеваемых вами заголовках.
Некоторые из них вам явно не нужны.

3

Re: JS: Get запрос

Заголовок Accept-Encoding, содержащий значения gzip, deflate, br, sdch и др. явным образом указывают серверу по возможности сжимать данные. Поэтому Вы получаете заархивированный HTML страницы. В этом можно легко убедиться, прочитав бинарное содержимое ответа xhr.responseBody, сохранив его в файл с расширением .gzip и открыв, например, в 7-zip - в архиве будет та самая страница.
Чтобы запретить использовать сжатие, необходимо либо указать значение "identity", либо задать для данного вида сжатия параметр q=0: "gzip;q=0,deflate,br" (у меня почему-то не сработало, хотя в RFC 2616 section 14 приводится такой метод).
Конкретно в этом случае, как намекнул Malcev, можно просто не добавлять этот заголовок - ответ приходит не сжатый.

Щт Уккщк Куыгьу Туче