Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 14.12.2014, 10:49
Интересующийся
Отправить личное сообщение для Vostokkk Посмотреть профиль Найти все сообщения от Vostokkk
 
Регистрация: 14.12.2014
Сообщений: 12

проблема с запросом XMLHTTPRequest
Написал запросчик методом GET:
Sub HD_TimeFrame_()
Dim XMLHTTP As Variant, URL As String, HD_TimeFrame As String

URL = "http://ru.investing.com/common/modules/js_instrument_chart/api/data.php?symbol=S%2526P%2B500&pair_id=166&pair_id_for_news=166&chart_type=area&pair_interval=86400&candle_count=120&events=yes&volume_series=yes"

Set XMLHTTP = CreateObject("MSXML2.XMLHTTP")
  With XMLHTTP
    .Open "GET", URL, False
    .setRequestHeader "Accept", "application/json, text/javascript, */*; q=0.01"
    .setRequestHeader "Accept-Encoding", "gzip, deflate, sdch"
    .setRequestHeader "Accept-Language", "ru-RU,ru;q=0.8,en-US;q=0.6,en;q=0.4"
    .setRequestHeader "Connection", "keep-alive"
    .setRequestHeader "Host", "ru.investing.com"
    .setRequestHeader "User-Agent", "Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36"
    .setRequestHeader "X-Requested-With", "XMLHttpRequest"
    .setRequestHeader "Referer", "http://ru.investing.com/indices/us-spx-500"
    .setRequestHeader "Content-Type", "application/json"
    .send
  End With

  HD_TimeFrame = XMLHTTP.responseText
'  Debug.Print HD_TimeFrame
  Set XMLHTTP = Nothing
End Sub

По идее он должен возвратить JSON, но увы - возвращает какой-то невостребованный HTML. "Сижу" на этой проблеме уже неделю, весь гугл и яндекс обшарил - ответов нет. Думал, может комп глючит где-то. Сегодня написал такой же запросчик, но на сайт Yahoo (на страницу где есть JSON). Результат положительный - JSON вернул корретно. Помогите найти причину ошибки.
.

Последний раз редактировалось Vostokkk, 14.12.2014 в 10:55.
Ответить с цитированием
  #2 (permalink)  
Старый 15.12.2014, 08:34
Профессор
Отправить личное сообщение для krasovsky Посмотреть профиль Найти все сообщения от krasovsky
 
Регистрация: 21.12.2012
Сообщений: 869

С чего ради он таки должен тебе json? Потому что ты указал аpplication/json?
Ответить с цитированием
  #3 (permalink)  
Старый 15.12.2014, 11:16
Интересующийся
Отправить личное сообщение для Vostokkk Посмотреть профиль Найти все сообщения от Vostokkk
 
Регистрация: 14.12.2014
Сообщений: 12

Сообщение от krasovsky Посмотреть сообщение
С чего ради он таки должен тебе json? Потому что ты указал аpplication/json?
Потому что данные, на которые делается запрос представлены на странице в JSON.
Ответить с цитированием
  #4 (permalink)  
Старый 15.12.2014, 11:33
Профессор
Отправить личное сообщение для krasovsky Посмотреть профиль Найти все сообщения от krasovsky
 
Регистрация: 21.12.2012
Сообщений: 869

Сообщение от Vostokkk
Потому что данные, на которые делается запрос представлены на странице в JSON.
Судя по редиректу на главную страницу хтмл которой ты получаешь, либо url не верный, либо параметры не верны, либо доступ к этим api только для авторизированных пользователей, либо эти api ныне закрыты. Выбирай
Вероятно теперь доступно только это http://www.investing.com/webmaster-tools/

Последний раз редактировалось krasovsky, 15.12.2014 в 11:38.
Ответить с цитированием
  #5 (permalink)  
Старый 15.12.2014, 12:29
Интересующийся
Отправить личное сообщение для Vostokkk Посмотреть профиль Найти все сообщения от Vostokkk
 
Регистрация: 14.12.2014
Сообщений: 12

Сообщение от krasovsky Посмотреть сообщение
Судя по редиректу на главную страницу хтмл которой ты получаешь, либо url не верный, либо параметры не верны, либо доступ к этим api только для авторизированных пользователей, либо эти api ныне закрыты. Выбирай
Вероятно теперь доступно только это http://www.investing.com/webmaster-tools/
Вот. Тот же сайт, но запрос методом POST.

Sub HistoricalData()
Dim XMLHTTP As Variant, URL As String, Data As String

URL = "http://ru.investing.com/instruments/HistoricalDataAjax"
Set XMLHTTP = CreateObject("MSXML2.XMLHTTP")
With XMLHTTP
  .Open "POST", URL, False
  .setRequestHeader "Accept", "text/plain, */*; q=0.01"
  .setRequestHeader "Content-Type", "application/x-www-form-urlencoded"
  .setRequestHeader "Host", "ru.investing.com"
  .setRequestHeader "Accept-Encoding", "gzip,deflate"
  .setRequestHeader "X-Requested-With", "XMLHttpRequest"
  .setRequestHeader "Referer", "http://ru.investing.com/indices/us-spx-500-historical-data"
  .setRequestHeader "Accept-Language", "uk-UA,uk;q=0.8,ru;q=0.6,en-US;q=0.4,en;q=0.2,de;q=0.2"
  .setRequestHeader "User-Agent", "Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/37.0.2062.103 Safari/537.36"
  .send "action=historical_data&curr_id=166&st_date=01%2F11%2F2014&end_date=15%2F12%2F2014&interval_sec=Daily"
End With

Data = XMLHTTP.responseText
Debug.Print Data

Set XMLHTTP = Nothing
End Sub


Если ты возьмёшь URL - тоже будет редирект, но в процедуре запрос идёт туда куда надо. URL верный. (Google Chrome-F12-Network-Headers). Параметры тоже верные. Про закрытые api - не знаю, но мне мой знакомый по другому форуму демонстрирует удачный процесс соединения, а у меня - тупик. Вот где собака зарыта, все мозги стёр уже.
Ответить с цитированием
  #6 (permalink)  
Старый 15.12.2014, 13:29
Профессор
Отправить личное сообщение для krasovsky Посмотреть профиль Найти все сообщения от krasovsky
 
Регистрация: 21.12.2012
Сообщений: 869

Как я вижу, у него другой урл и другие параметры.
Повторил запрос этого твоего знакомого с помощью этого инструмента(онлайн создание запросов) https://www.hurl.it/ - получил не json а хтмл, таблицу с результатами. Постом конечно. Гетом - дырка от бублика, как и по твоему запросу, как его не верти. Твой и так и так возвращает НИЧЕГО.

Я кстати не нашел на сайте никакой доки, так что смею предположить что все знания о запросах и получении из них результатов почерпнуты путем сидения в консолях и анализа запросов,так что повторюсь - вполне возможно что сайт уже не отдает json, или поменялись параметры, или урл. Так что либо ищи доку,если она вообще существует, либо сиди в консоли и анализируй это.
Ответить с цитированием
  #7 (permalink)  
Старый 15.12.2014, 14:37
Интересующийся
Отправить личное сообщение для Vostokkk Посмотреть профиль Найти все сообщения от Vostokkk
 
Регистрация: 14.12.2014
Сообщений: 12

Сообщение от krasovsky
с помощью этого инструмента(онлайн создание запросов) https://www.hurl.it/
Интересный инструмент :-)
Сообщение от krasovsky
вполне возможно что сайт уже не отдает json, или поменялись параметры, или урл
Как урл поменялся? Его же видно (Google Chrome-F12-Network-Headers) Или я что-то не понял?
Сообщение от krasovsky
Так что либо ищи доку,если она вообще существует
Да знать бы где искать :-)
Ответить с цитированием
  #8 (permalink)  
Старый 15.12.2014, 14:41
Интересующийся
Отправить личное сообщение для Vostokkk Посмотреть профиль Найти все сообщения от Vostokkk
 
Регистрация: 14.12.2014
Сообщений: 12

Кстати пытался регистрироваться на сайте и в код добавил пароль и имя - не помогло. Была ещё идея - зайти через прокси. Но как в коде выставить прокси - не нашёл нигде синтаксиса.
.setProxy = "54.244.126.1:80" - как ни крутил - не работает
Ответить с цитированием
  #9 (permalink)  
Старый 15.12.2014, 14:42
Профессор
Отправить личное сообщение для krasovsky Посмотреть профиль Найти все сообщения от krasovsky
 
Регистрация: 21.12.2012
Сообщений: 869

Сообщение от Vostokkk
Как урл поменялся? Его же видно (Google Chrome-F12-Network-Headers) Или я что-то не понял?
Не у тебя поменялся, а у них. К примеру: сервер отдавал некие данные по урлу www.mysite.com/myurl/, а завтра разработчики решили отдавать эти данные по другому урлу www.mysite.com/myurl2/ и никому об этом не сказали.
Ответить с цитированием
  #10 (permalink)  
Старый 15.12.2014, 14:43
Профессор
Отправить личное сообщение для krasovsky Посмотреть профиль Найти все сообщения от krasovsky
 
Регистрация: 21.12.2012
Сообщений: 869

Сообщение от Vostokkk
Кстати пытался регистрироваться на сайте и в код добавил пароль и имя - не помогло. Была ещё идея - зайти через прокси. Но как в коде выставить прокси - не нашёл нигде синтаксиса.
.setProxy = "54.244.126.1:80" - как ни крутил - не работает
Судя по всему не нужно ни реги ни прокси. Нужно знать на какой урл отправлять и какие параметры. И все. Методом тыка ты ничего не дебьешься
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
проблема с get запросом FearOfTheHamster AJAX и COMET 4 19.02.2014 15:10
проблема с new XMLHttpRequest() files adik7960 AJAX и COMET 0 31.03.2013 15:32
Проблема с GET запросом Арсений AJAX и COMET 1 14.05.2010 20:21
Проблема с дизайном после отправки xmlhttprequest, Проблема с дизайном после отправки cyberx AJAX и COMET 3 01.05.2010 17:07
Проблема с Ajax запросом в IE и Opera flash_uz AJAX и COMET 0 30.04.2009 15:08