MQL4:学习WebRequest方法

大家好!

不久前开放位置的教训我们从网上的网站上提取数据。我们当时在课堂上所做的事情可以用另一种方法来完成,而无需使用DLL,因此不依赖于操作系统。

您只需要MetaTrader 4终端和MQL代码编辑器。以及标准知识mql4WebRequest方法,我们今天将与您分享。

WebRequest方法

WebRequest方法可以通过两种方式调用。第一种方法是将简单的请求发送到具有标准HTTP头的服务器。他看起来像这样:

int  WebRequest(
const string      method//HTTP方法
const string      url,//URL
const string      cookie,           // cookie
const string      referer,          // referer
int               timeout,   //超时
const char        &data[],//HTTP消息主体数组
int               data_size,      //数据[]数组大小(字节)
char              &result[],        //服务器响应数据数组
string            &result_headers   //服务器响应头
);

第二种方法允许您自己填充Headers数组。这在各种复杂的情况下非常有用,例如,当您需要将文件发送到服务器时。

int  WebRequest(
const string      method//HTTP方法
const string      url,//URL
const string      headers//标题
int               timeout,   //超时
const char        &data[],//HTTP消息主体数组
char              &result[],        //服务器响应数据数组
string            &result_headers   //服务器响应头
);

method可以是任何HTTP方法。在视频教程中,我们将讨论GET方法的使用。

url — 您要访问的服务器的地址;

cookie — 相应地,Cookies,例如用于服务器上的授权;

referer-HTTP请求Referer头的值;

timeout — 超时(以毫秒为单位),即等待服务器响应的时间;

headers — 你的自定义标题。如果使用方法调用的第一个变体,默认情况下,查询将自动发送标题为:Content type:application/x-www-form-urlencoded。

在浏览器的情况下,标题可能看起来像这样,例如:

GET /tutorials/ HTTP/1.1
Host: tlap.com
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.1.5) Gecko/20091102 Firefox/3.5.5 (.NET CLR 3.5.30729)
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 300
Connection: keep-alive
Cookie: PHPSESSID=r2t5uvjq435r4q7ib3vtdjq120
Pragma: no-cache
Cache-Control: no-cache

在本例中,要发送文件,您需要以下标题:

Content-Type: multipart/form-data; boundary=—-WebKitFormBoundaryePkpFF7tjBAqx29L
Content-Disposition: form-data; name=»uploadedfile»; filename=»hello.tlap» Content-Type: application/x-object

但发送文件是一个相当罕见的任务,更常见的情况下,我们只需要从MQL4程序获取一些数据。

WebRequest方法本身返回int,即一个数字。这个数字只不过是服务器响应码,或者在方法执行错误的情况下是-1。答案码是三位数。目前有五类代码:

1xx:信息请求已收到并理解,处理仍在进行;
2xx:success请求已成功接收、理解和处理;
3xx:REDIRECTION:需要采取进一步行动来满足请求;
4xx:客户端错误查询语法不好或无法执行。
5xx:服务器错误-服务器无法执行有效请求。

这里有几个最常见的例子:

200 OK请求成功如果客户端请求任何数据,则它们位于消息头或正文中。这个代码是成功的;

301 Moved Permanently. 请求的文档已最终移动到标题位置字段中指定的新URL。此代码表示页面已被移动,现在可以在另一个地址访问。

400 Bad Request. 由于语法错误,服务器无法理解请求。此代码表示在查询过程中出现了打字错误;

401 Unauthorized. 请求需要用户标识。此代码意味着您必须首先登录-从网站输入登录名和密码;

403 Forbidden. 服务器理解请求,但由于访问限制而拒绝执行;

404 Not Found. 服务器理解请求,但没有找到相应的URL资源。通常情况下,此代码表示页面已被删除。

500 Internal Server Error. 任何不属于5xx类其他错误范围的服务器内部错误。

事实上,当然,代码要多得多。在每个班级中,他们通常从十几个到几十个,但在这里引用一切都是没有意义的,特别是因为这些信息可以在网上找到。我只列出了最常见的答案代码。

不要忘记将使用的站点地址添加到终端中的允许URL列表中,否则将无法工作。要执行此操作,请按Ctrl+O或转到工具->设置->顾问选项卡。

设置应大致如上图所示。

请注意,WebRequest方法正在等待服务器的响应,并且在响应到达之前,脚本无法进一步执行。因此,在指示器这种方法不能使用。此外,请注意,执行方法需要时间,并且在此期间脚本或者参赞没有什么可以做的。当您发送严重的请求或收到严重的响应(例如带有任何数据的大型文件)时,特别需要考虑这种特殊性。

结论

今天,我们介绍了WebRequest方法,它提供了一种相当简单的方法,可以让您与您的用户交互。顾问脚本外部世界。使用这种方法,您可以检索网页,下载和发送文件,自动操作网站等等。

这种方法的可能性是无限的,特别是如果你不知道其他编程语言。在它的帮助下,你可以解决完全不是交易者的问题,例如构建自动点击或模拟网络上任何其他有用的赚钱工作。这是一个有趣的想法,但如果你努力工作,你可以写你的汽车冲浪者,这将为你赚钱,同时你的主要机器人合并存款“小东西,不错。

从课堂上下载脚本源代码

论坛主题

尊敬的Dmitry Aka Silentspec
Tlap.com

MQL4教程 ,,,,