WebRequest & ddos protection by cloudflare - страница 2

 
Sergey Dzyublik:

Бред.

1) Почему? Тут есть только два вариант GET или POST. Можно ли писать с версией не скажу, тут нужно смотреть документацию и исходные примеры по функции.

Бразуры засылают запросы с версией, обычно. Насколько я помню из примеров по функции - всегда пишется только GET.

Одно скажу сразу - писать в кукисы то что ими не является по сути не очень корректно + отправлять куписы серверу при первом подключении не очень логично.

По логике вещей нужно серверу запрос послать, получив от него ответ его обработать и через 5 секунд послать новый запрос с требуемыми данными.

2) Насколько я понимаю и вот этой информации в куках не должно быть - "User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.9.2.8)".

Если я правильно все понимаю в реализации функции - в первом параметре нужно просто "GET" воткнуть, а версия протокола и данные по агенту скорей относятся к headers (Заголовки запроса вида "ключ: значение", разделенные переносом строки "\r\n").

 

Если говорить о первом варианте использования функции то примерно так выходит

Базовый запрос от браузера (в моем случае это Мозилла)

GET /ru/ HTTP/1.1
Host: https://yobit.net
User-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:58.0) Gecko/20100101 Firefox/58.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: ru-RU,ru;q=0.8,en-US;q=0.5,en;q=0.3
Accept-Encoding: gzip, deflate
Connection: keep-alive
Upgrade-Insecure-Requests: 1

Базовый запрос от терминала (в моем случае это МТ4 x64? bild 1090)

GET /ru/ HTTP/1.1
Cache-Control: no-cache
Connection: Keep-Alive
Pragma: no-cache
Content-Type: application/x-www-form-urlencoded
Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, */*
Accept-Charset: *,utf-8
Accept-Language: en
Host: https://yobit.net
User-Agent: MetaTrader 4 Terminal/4.1090 (Windows NT 6.1; x64)
Proxy-Connection: Keep-Alive

Для того чтобы подключиться к серверу и получить с него инфу использовался ПЕРВЫЙ вариант, а инфа сохранялась с файл.

Вот специальная функция для этого

bool WebRequest_YobitNet_GET(string url,string referer,string cookie=NULL,int timeout=5000)
{
//--------------------------------------------------------------------------------------------------------------------//
//Work variables
char webrequest_post[],webrequest_result[];

string webrequest_headers; 

bool ret = true; //The result of the processing (default is succeeded)
//--------------------------------------------------------------------------------------------------------------------//

ResetLastError();

//Выполняем запрос к серверу
webrequest_res=WebRequest("GET",url,cookie,referer,timeout,webrequest_post,0,webrequest_result,webrequest_headers); 

//Checking errors in the execution of the WebRequest function  
  if(webrequest_res==-1)
  {
  Print("Error in WebRequest. Error code = ",GetLastError());
  Print("WebRequest URL ",url);
  return(false);
  }

PrintFormat("File successfully loaded, File size =%d bytes.",ArraySize(webrequest_result)); 
      
int filehandle=FileOpen("YobitNet.htm",FILE_WRITE|FILE_BIN); 

  if(filehandle!=INVALID_HANDLE) 
  { 
  FileWriteArray(filehandle,webrequest_result,0,ArraySize(webrequest_result)); 
  FileClose(filehandle); 
  } 
//--------------------------------------------------------------------------------------------------------------------//
return(ret);
//--------------------------------------------------------------------------------------------------------------------//
}

Вызываем эту функцию примерно так

//Вариант №1
res = WebRequest_YobitNet_GET(webrequest_url,NULL,webrequest_cookie,webrequest_timeout);

URL и тайм-аут я вынес в параметры

input string webrequest_url     = "https://yobit.net/ru/"; //Website (Example URL https://yobit.net/)
input int    webrequest_timeout = 5000;                    //Timeout (less than 1000 is insufficient)

Результат запроса (код от сервера) и куки я вынес в общий модуль программы, там с ними проще работать.

string webrequest_cookie=NULL; //Куки необходимые для работы с сайтом

int webrequest_res     = 0;    //Результат отправки запроса в виде кода, 200 - успешный запрос.

Но, по сути, в жанном примере куки и вовсе не нужны походу.

В результате все вроде читается и инфа со страници пишится в файл.

PS

На более сложный анализ у меня времени нет (верней желания), да и походу там нужно/желательней использовать второй вариант.

 
Vladimir Batrudinov:

В результате все вроде читается и инфа со страници пишится в файл.

Ну сейчас уже у всех читается
 
победил кто нибудь POST запросы на приватное API yobit?
 
#define YoBitURLpublic  "https://yobit.io/api/3/"
#define YoBitURLprivate "https://yobit.io/tapi/"

string api_key    = "";
string api_secret = "";

void OnStart ()
{
  Print ("+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++");
  long   nonce = ReadNonce ();
  string parameters = "method=getInfo&nonce="+string(nonce);
  Print("param: ", parameters);
  string sign = SHA512::hmac (parameters, api_secret);
  Print("Sign: ", sign);
  string url = YoBitURLprivate;
  Print ("url:",url);

  char data [];
  string headers = "";
  
  headers += "Content-type: application/x-www-form-urlencoded"+"\n";
  //headers += "Content-Type: text/html; charset=utf8" +"\n";

  //headers += "User-Agent: xdx v1.0" +"\n";
  //headers += "method: getInfo" +"\n";
  //headers += "nonce: " + string(nonce) + "\n";
  headers += "Key:"  + api_key + "\n";
  headers += "Sign:" + sign;// + "\n\n";
  Print("-----------headers----------");
  Print (headers);
  
  //StringToCharArray (headers,data,0,WHOLE_ARRAY);
  StringToCharArray (parameters,data,0,WHOLE_ARRAY,CP_UTF8);
  int servercode;
  Print("-----------body----------");
  Print(CharArrayToString (data,0,WHOLE_ARRAY,CP_UTF8));
  string resp = Request("POST", url, headers, data, servercode);
  Print("code http request, 200 - successful request: ", servercode);
  Print("server response: ", resp);
}


уже всё перепробовал, в чем засада не пойму...

сервер отвечает {"success":0,"error":"invalid key, sign, method or nonce"}

Причина обращения: