设为首页 加入收藏

TOP

使用 TRESTClient 与 TRESTRequest 作为 HTTP Client(一)
2017-10-09 13:58:54 】 浏览:6558
Tags:使用 TRESTClient TRESTRequest 作为 HTTP Client

在 Delphi XE 推出以前的年代,Delphi的展方向是笔直朝向库连结Windows 用程式个目不断前的,从Delphi 1开始,到Delphi 7,Delphi奠定了VB Killer的外号,主要依靠的就是与接功能超越其他开工具,而且超越的距离不只一个世代。

在 .NET开始展,Delphi 8, Delphi .NET 不断延候,与库连接功能的方便性,仍然让许多ERP厂商、硬体厂商持续爱用 Delphi.

直到 Web 开与 App 开超越了 Windows 用程式的需求,VC, VB, Delphi 也开始随着波潮流,渐渐不再像 1990年代那么广受戴了。

在1990到 2010年之,Delphi的网路连线功能,主要是借由第三方元件来提供的,其中知名度最高,全球使用人数也最多的,应该就是 Indy 套元件了。

套元件在 2000 年前,叫做 WinShose,从第八版之后才改名Indy,全球投入套元件开的开,前后超40人,从最基的 TCP/IP 功能到各种定的Client与Server 端元件,笔者从中得益非常多,也开了当中的DNS Server元件,讯协定的深入了解,Indy团队是我不可或缺的师长

随着Delphi 工具走入了多平台开域,Indy的局限性也在两三年凸了出来,主要是在各个作上面于SSL与加密功能的支援无法合到作内建的功能所致。

由于个局限性,Delphi XE6开始,REST Client系列元件渐渐开始成 Delphi 团队的重点开发项目之一,所以我从 Delphi XE6, Delphi XE7 之后的版本,可以发现到,使用 TRESTClient, TRESTRequest, TRESTResponse 系列合的用程式越来越多了,原厂也不断鼓励大家使用套元件来提供 REST API 的连线功能。

REST API 的基是 HTTP 定,大多以 HTTP 的 POST 方法把 JSON 编码形式的参数传递到 Server,而 Server 再以 JSON 形式的参数回

作法也会稍有化,例如以 POST 方法把 Web-Form 编码形式的参数传递给 Server,Server 再以 JSON 形式把料回

形式不一而足,但相同的是 HTTP 定,最常用的也是以 POST 方法把参数传给 Server 端。

今天要跟大家分享的主是如何『使用 TRESTClient 与 TRESTRequest 作 HTTP Client』。

 

前面已提到,在没有 TRESTClient 整元件以前,我通常用的是 Indy 系列的元件来提供网路传输的功能,而在有了 TRESTClient 整元件,我在行平台上面就可以不需要另外配置函式,也能直接使用 https 与 server 连线了,在勒索病毒泛的今天,使用 https 会使用者比安心。

POST业说

在 HTTP 的 POST 作当中,参数跟 GET 作,Client端需要以 name=value&name2=value2 种形式行字串接,再送到 Server 端去。Get 跟 POST的差异,在于 Get 方法是把所有参数当做 URL 的一部分,送 HTTP GET 指令的候,参数同 URL  一起送。

而 POST 作业则送完 POST 指令后,把所有的参数与料随之送。依照 HTTP 型定的范,GET 作的 URL 是无法加密的,而且度也有限制。因此,当需要传递料比多,或者有机敏性,透 HTTPS 送,就是最直接,也最方便,更是目前最通用的料保方法。

POST 传递的参数,除了字串以外,常常包含了档案传递。我很常看到在网上面以按提供使用者选择要上的档案,也常看提供以拖拉的方式把档案上端系,尤其网页邮件系最常种作法。

去以 TIdHTTP 元件的 POST 方法送参数,呼叫方式如下:

 1 var
 2     httpClient : TIdHTTP;
 3     url, params, httpResultStr : string;
 4 begin
 5     url := 'http://mytestURL.com/test.php';
 6     params := 'name=我的名字&test=测试';
 7 
 8     httpClient := TIdHTTP.Create(self); 
 9     try
10          httpResultStr := httpClient.Post(url, params);
11          showMessage(httpResultStr);
12     finally
13         httpClient.Free; 
14     end; 
15 end;

这样就可以把 params 字串的众参数到 server 去了。理上是这样,但事情并没有简单,在 HTTP 定当中要参数 Server,如果些字串包含了特殊字元,要先经过编码,而编码,是我一生都需要与之抗的繁复程序。

在 HTTP GET 方法当中,所有的参数除了要以 name=value 每一个参数做描述,以及需要用 & 来接各参数,所有的 value 都需要以 url encode 来脱 URL 保留字元的纠缠。name 是否需要编码呢?笔者建,name 就乖乖的用英文吧,可以省下很多问题,以及些可避免的问题所需要的时间

那么同的功能,以 TRESTClient 跟 TRESTRequest 要怎么达成呢? 也很容易,作法如下:

1. 在 form 里面放上 TRESTClient 跟 TRESTRequest 元件各一。

2. 把要传递的参数加到 TRESTRequest 体的 params 属性里面去,个属性的型是 TArray,所以可以存放多参数。

3. 定 TRESTClient 要送参数的URL,注意,URL 是定在TRESTClient 哦!

4. 定 TRESTRequest 要使用的传输方法,要POST(因正在介的是POST方法,按照您的需求整)

5. 呼叫 TRESTRequest 体的 execute 方法,就可以把料送去 server 了。

 

写成 Delphi 的程式,会像以下这样:

self.RESTClient1.BaseURL :=
          'http://我的网址/acceptNewCard.php';
self.RESTRequest1.Params.Clear;
self.RESTRequest1.Method := rmPOST;

self.RESTRequest1.AddParameter('test', self.EditCardNo.Text);
self.RESTRequest1.AddParameter('name', self.EditName.Text);

是不是很容易呢?的确很容易,里问题等下再深入探,先来看 server 端要怎么接收些个参数,我用 PHP 当范例,需要用 C#,JSP的者朋友们请自行转译喔??

 

PHP Server 端接收 POST 参数的方法

从 1994 年开始,笔者就陆续撰文明 HTTP POST 方法如何接参数,包含了CGI 用C,perl等作,也包含 ISAPI 以 Delphi 作,近几年比流行的是 PHP,JSP,C#,但 PHP 程

首页 上一页 1 2 3 下一页 尾页 1/3/3
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇delphi XE Datasnap SERVER 在win.. 下一篇Delphi提取PDF文本

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目