idHttp 兩種傳輸數據的方法,即get 和 post 總結
*服務端用c# 模擬 WebApi
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Net.Http;
using System.Web.Http;
namespace webapitest1.Controllers
{
public class ProductController : ApiController
{
public string Get()
{
return "調用Get 無參方法";
}
[HttpGet]
public string Get([FromUri]string msg) {
return $"調用Get有參方法:{msg}";
}
[HttpPost]
public string Post(dynamic obj) {
return $"調用post方法,傳入參數:{obj.name},{obj.age}";
}
}
}
- 客戶端用Delphi 測試(Delphi中默認的字符編碼爲Ansi,而網絡中基本上使用的都是utf8,因此注意轉碼)
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, IdBaseComponent, IdComponent, IdTCPConnection, IdTCPClient,
IdHTTP, StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
Memo1: TMemo;
IdHTTP1: TIdHTTP;
Button2: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
var
url:string;
responsestream:TStringStream;
ResponseStr:string;
requestList:TStringList;
RequestStream:TStringStream;
jsonStr:string;
begin
responsestream:=TStringStream.Create('');
RequestStream:=TStringStream.Create('');
requestList:=TStringList.Create;
url:='http://localhost:55867/api/product';
requestList.Add('name=張三');
requestList.Add('age=22');
try
//IdHTTP1.Post(url,requestList,responsestream); //列表方式提交
//responsestream.Position:=0;
RequestStream.WriteString(AnsiToUtf8('{"name":"張三","age":22}'));//這裏用轉碼是爲了傳輸帶有中文的參數
IdHTTP1.Request.ContentType:='application/json'; //指定傳輸類型爲json,主要爲了方便服務端dynamic 動態推斷類型,即可以把json字符串自動轉換成object 對象
IdHTTP1.Post(url,RequestStream,responsestream); //流方式提交
responsestream.Position:=0;
Memo1.Lines.Add(StringReplace(Utf8ToAnsi(responsestream.DataString),'"','',[rfReplaceAll])); //這裏去除了雙引號 "
responsestream.Free;
RequestStream.Free;
requestList.Free;
except on e:Exception do
begin
ShowMessage(e.Message);
end;
end;
end;
procedure TForm1.Button2Click(Sender: TObject);
var
stream:TStringStream;
url:string;
begin
url:='http://localhost:55867/api/product';
try
stream:=TStringStream.Create('');
IdHTTP1.Get(url,stream);
stream.Position:=0;
Memo1.Lines.Add(Utf8ToAnsi(stream.DataString));
finally
stream.Free;
end;
end;
end.