Пожалуйста, предоставьте полную структуру HTTP запроса (с хрома или прокси-снифера - не важно).
Сейчас не ясно конкретно что нужно передать в запросе с MT.
На вскидку, проблема может быть в передаче ненужных и не правдивых данных:
string headers="Accept: */*\r\nAccept-Encoding: gzip, deflate\r\nContent-Length: 400\r\nContent-Type: application/x-www-form- urlencoded\r\nHost: www.investing.com\r\nUser-Agent: runscope/0.1\r\nX-Requested-With: XMLHttpRequest\r\n";
Пожалуйста, предоставьте полную структуру HTTP запроса (с хрома или прокси-снифера - не важно).
Сейчас не ясно конкретно что нужно передать в запросе с MT.
На вскидку, проблема может быть в передаче ненужных и не правдивых данных:
Через сайт https://www.hurl.it/ отправляю такие данные:
HEADERS
Accept: */*
Accept-Encoding: gzip, deflate
Content-Length: 349
Content-Type: application/x-www-form-urlencoded
Host: ru.investing.com
User-Agent: runscope/0.1
X-Requested-With: XMLHttpRequest
BODY
country%5B%5D=25&country%5B%5D=4&country%5B%5D=17&country%5B%5D=39&country%5B%5D=72&country%5B%5D=26&country%5B%5D=10&country%5B%5D=6&country%5B%5D=37&country%5B%5D=43&country%5B%5D=56&country%5B%5D=36&country%5B%5D=5&country%5B%5D=61&country%5B%5D=22&country%5B%5D=12&country%5B%5D=35&timeZone=18&timeFilter=timeRemain¤tTab=today&limit_from=0
PARAMETERS
country[]: 25
country[]: 4
country[]: 17
country[]: 39
country[]: 72
country[]: 26
country[]: 10
country[]: 6
country[]: 37
country[]: 43
country[]: 56
country[]: 36
country[]: 5
country[]: 61
country[]: 22
country[]: 12
country[]: 35
currentTab: today
limit_from: 0
timeFilter: timeRemain
timeZone: 18
А при POST запросе с сайта, на сервер отправляется такой вот Request Header
POST /economic-calendar/Service/getCalendarFilteredData HTTP/1.1
Host: ru.investing.com
Connection: keep-alive
Content-Length: 349 Accept: */*
Origin: https://ru.investing.com
X-Requested-With: XMLHttpRequest
User-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64)
AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36
Content-Type: application/x-www-form-urlencoded
Referer: https://ru.investing.com/economic-calendar/
Accept-Encoding: gzip, deflate,
br Accept-Language: ru-RU,ru;q=0.9,en-US;q=0.8,en;q=0.7
Cookie: adBlockerNewUserDomains=1505218236; travelDistance=4; adbBLk=7; PHPSESSID=h3u92hvij5jpm58jfporupi9b7; geoC=RU; StickySession=id.88899098863.312ru.investing.com; gtmFired=OK; billboardCounter_7=2; nyxDorf=OTUwYmEpP2I%2FYD0wYC00NDJgZThjejU2NzdmZQ%3D%3D
Параметры == body
У себя для быстрой проверки сократил параметры и проверял c меньшим количеством выгружаемых данных и вставлял только три хидера (X-Requested-With, Host, Content-Type). Последний вариант, это уже проверка на остальные варианты, так как программа не выводит ошибку и сложно отловить где я и что делаю не правильно. Если ничего не получится, буду смотреть через Fidler.
- ru.investing.com
Пожалуйста, предоставьте полную структуру HTTP запроса (с хрома или прокси-снифера - не важно).
Сейчас не ясно конкретно что нужно передать в запросе с MT.
На вскидку, проблема может быть в передаче ненужных и не правдивых данных:
Fidler работает вот с этим значениями и выводит адекватный ответ:
Header
Accept: */*
Accept-Encoding: gzip, deflate
Content-Length: 400
Content-Type: application/x-www-form-urlencoded
Host: www.investing.com
User-Agent: runscope/0.1
X-Requested-With: XMLHttpRequest
country%5B%5D=25&country%5B%5D=32&country%5B%5D=6&country%5B%5D=37&country%5B%5D=72&country%5B%5D=22&country%5B%5D=17&country%5B%5D=39&country%5B%5D=14&country%5B%5D=10&country%5B%5D=35&country%5B%5D=43&country%5B%5D=56&country%5B%5D=36&country%5B%5D=110&country%5B%5D=11&country%5B%5D=26&country%5B%5D=12&country%5B%5D=4&country%5B%5D=5&timeZone=8&timeFilter=timeRemain¤tTab=today&limit_from=0
- www.investing.com
В первом посту вы привели абсолютно не компилируемый код.
Каждый, кто захочет вам помогать должен тратить время на то, что бы просто откомпелировать его.
И, о чудо, после компиляции окажется что все работает.
1. Убедитесь, что вы добавили сайт https://www.investing.com/ в настройках МТ в список разрешенных.
2. Рабочий код:
string url="https://www.investing.com/economic-calendar/Service/getCalendarFilteredData"; string headers="X-Requested-With: XMLHttpRequest\r\nContent-Type: application/x-www-form- urlencoded"; string params="country[]:25\r\ntimeZone:8\r\ntimeFilter:timeRemain\r\ncurrentTab:today\r\nlimit_from:0\r\n"; char data[]; StringToCharArray(params, data, 0, StringLen(params)-1); char result[]; string result_headers; int res=WebRequest("POST", url, headers, 30000, data, result, result_headers); if(res!=200){ Print("Ошибка передачи файла на сервер #"+(string)res+", LastError="+(string)GetLastError()); } else{ Print(ArraySize(result)); }
3. Кусок ответа:
{"data":"<tr> <td colspan=\"9\" class=\"theDay\" id=\"theDay1516665600\">Tuesday, January 23, 2018<\/td> <\/tr> <tr id=\"eventRowId_360123\" class=\"js-event-item \" event_attr_ID=\"1112\" data-event-datetime=\"2018\/01\/23 00:00:00\"> <td class=\"first left time js-time\" title=\"\">00:00<\/td> <td class=\"left flagCur noWrap\"><span title=\"Singapore\" class=\"ceFlags Singapore\" data-img_key=\"Singapore\"> <\/span> SGD<\/td> <td class=\"left textNum sentiment noWrap\" title=\"Moderate Volatility Expected\" data-img_key=\"bull2\"><i class=\"grayFullBullishIcon\"><\/i><i class=\"grayFullBullishIcon\"><\/i><i class=\"grayEmptyBullishIcon\"><\/i><\/td> <td class=\"left event\" title=\"Click to view more info on CPI\"><a href=\"\/economic-calendar\/singaporean-cpi-1112\" target=\"_blank\"> CPI (YoY) (Dec)<\/a> <\/td> <td class=\"bold act redFont event-360123-actual\" title=\"Worse Than Expected\" id=\"eventActual_360123\">0.4%<\/td> <td class=\"fore event-360123-forecast \" id=\"eventForecast_360123\">0.6%<\/td> <td class=\"prev blackFont event-360123-previous\" id=\"eventPrevious_360123\"><span title=\"\">0.6%<\/span><\/td> <td class=\"alert js-injected-user-alert-container \" data-name =\"CPI\" data-event-id=\"1112\" data-status-enabled=\"0\"> <span class=\"alertBellGrayPlus genToolTip oneliner\" data-tooltip=\"Create Alert\" data-tooltip-alt=\"Alert is active\"><\/span> <\/td> <\/tr> <tr id=\"eventRowId_361209\" class=\"js-event-item \" event_attr_ID=\"370\" data-event-datetime=\"2018\/01\/23 01:30:00\"> <td class=\"first left time js-time\" title=\"\">01:30<\/td> <td class=\"left flagCur noWrap\"><span title=\"Japan\" class=\"ceFlags Japan\" data-img_key=\"Japan\"> <\/span> JPY<\/td> <td class=\"left textNum sentiment noWrap\" ........................
4. Сам сайт https://www.investing.com/ как-то кривовато написан, в частности работает только с неверным значением Content-Type
Не исключено, что со временем из-за исправлений на сайте данный код перестанет работать.
В первом посту вы привели абсолютно не компилируемый код.
Каждый, кто захочет вам помогать должен тратить время на то, что бы просто откомпелировать его.
И, о чудо, после компиляции окажется что все работает.
1. Убедитесь, что вы добавили сайт https://www.investing.com/ в настройках МТ в список разрешенных.
2. Рабочий код:
3. Кусок ответа:
4. Сам сайт https://www.investing.com/ как-то кривовато написан, в частности работает только с неверным значением Content-Type
Не исключено, что со временем из-за исправлений на сайте данный код перестанет работать.
Спасибо за развернутый ответ!
Я извиняюсь что дал по видимому не правильные данные, так как тестировал webrequest и искал способы таки отправить этот запрос.
Вот эта строчка неоднозначно описана в мануале, она в основном и нужна была.
StringToCharArray(params, data, 0, StringLen(params)-1);
Благодарю за помощь
Добрый день, возникла еще одна не большая проблема, параметры которые вы предложили вводить, не подходят, даже у вас на примере отображается Сингапур а должна быть Австралия. Как я понимаю параметры WebRequest вообще не хочет видеть и передает стандартное сообщение при входе на сайт. Я пробовал уже вводить в таком виде с добавлением \r\n все равно та же ситуация. Подскажите пожалуйста как это можно исправить? С Fidler и https://www.hurl.it/ все работает на стандартных параметрах
country%5B%5D=25&timeZone=8&timeFilter=timeRemain¤tTab=tomorrow&limit_from=0
- www.hurl.it
1) Content-Type должен соответствовать формату разделения данных в POST запросе.
2) В предложенном варианте решения была допущена ошибка:
StringToCharArray(params, data, 0, StringLen(params)-1); // Number of array elements to copy
Рабочий вариант:
string url="https://www.investing.com/economic-calendar/Service/getCalendarFilteredData"; string headers="X-Requested-With: XMLHttpRequest\r\nContent-Type: application/x-www-form-urlencoded"; string params="country%5B%5D=25&country%5B%5D=4&country%5B%5D=17&country%5B%5D=39&country%5B%5D=72&country%5B%5D=26&country%5B%5D=10&country%5B%5D=6&country%5B%5D=37&country%5B%5D=43&country%5B%5D=56&country%5B%5D=36&country%5B%5D=5&country%5B%5D=61&country%5B%5D=22&country%5B%5D=12&country%5B%5D=35&timeZone=18&timeFilter=timeRemain¤tTab=today&limit_from=0"; char data[]; StringToCharArray(params, data); ArrayResize(data, ArraySize(data)-1); char result[]; string result_headers; int res=WebRequest("POST", url, headers, 30000, data, result, result_headers); if(res!=200){ Print("Ошибка передачи файла на сервер #"+(string)res+", LastError="+(string)GetLastError()); } else{ Print(ArraySize(result)); }
1) Content-Type должен соответствовать формату разделения данных в POST запросе.
2) В предложенном варианте решения была допущена ошибка:
Рабочий вариант:
Спасибо вам, очень помогли. Все отлично работает
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Добрый день, пытаюсь отправить POST запрос на сайт investing.com, используя такие параметры
int res;
char data[];
string sites="https://www.investing.com/economic-calendar/Service/getCalendarFilteredData";
string params="country[]:25\r\ntimeZone:8\r\ntimeFilter:timeRemain\r\ncurrentTab:today\r\nlimit_from:0\r\n";
string headers="Accept: */*\r\nAccept-Encoding: gzip, deflate\r\nContent-Length: 400\r\nContent-Type: application/x-www-form- urlencoded\r\nHost: www.investing.com\r\nUser-Agent: runscope/0.1\r\nX-Requested-With: XMLHttpRequest\r\n";
res=WebRequest("POST",sites,headers,30000,post,result,result_headers);
if(res!=200)
{
Print("Ошибка передачи файла на сервер #"+(string)res+", LastError="+(string)GetLastError());
}
На сайте описание скудноватое и очень мало тем с рассмотрением этого вопроса, в основном только авторизация. Возможно мог что-то напутать, но делал все по примеру в библиотеке. Подскажите что можно добавить или исправить?