idhttp get 與 post 方法

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.

image

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章