HTTP POST 请求函数 HttpPost
此函数用于发送带有JSON内容的POST请求到指定的URL,并接收服务器响应。它包括了必要的异常处理,确保在遇到错误时可以记录日志。
-
参数:
sUrl
:目标URL。sJson
:要发送的JSON格式字符串。
-
返回值:从服务器接收到的响应文本(通常也是JSON格式)。
-
关键点:
- 使用
TStringStream
将JSON字符串转换为流,以便可以通过TIdHTTP.Post
方法发送。 - 设置了适当的请求头信息,确保服务器知道我们发送的是JSON数据。
- 包含了连接超时设置 (
ConnectTimeout
) 和字符编码配置 (ContentType
,Accept
,CharSet
),以保证正确的数据传输。 - 异常处理机制,确保任何网络或协议错误都能被捕获并记录下来。
- 使用
HTTP GET 请求函数 HttpGet
此函数用于发起GET请求并获取服务器返回的数据。它的结构与 HttpPost
类似,但不需要传递额外的数据体。
-
参数:
sUrl
:目标URL。
-
返回值:从服务器接收到的响应文本。
-
关键点:
- 同样设置了请求头来指定接受的内容类型。
- 提供了相同的异常处理逻辑。
JSON 解析函数 GetProduceId
该函数演示了如何调用 HttpPost
函数并与后端服务交互以获取产品ID。它还展示了如何解析返回的JSON响应。
-
参数:
cName
:可能用于标识客户端或其他上下文信息(未在代码中使用)。localComm
:可能是某种通信接口或配置对象(未在代码中使用)。
-
返回值:根据需要返回特定值(当前为空)。
-
关键点:
- 构造了一个JSON字符串作为请求体的一部分。
- 调用了
HttpPost
发送请求并接收响应。 - 使用
TJSONObject.ParseJSONValue
方法将响应字符串解析为TJSONObject
对象。 - 检查响应中的
code
字段是否表示成功(假设0000
是成功的状态码)。
POST
function HttpPost(sUrl, sJson: string): string;
var
JsonToSend: TStringStream;
idHttp1: TIdHTTP;
begin
EnterCriticalSection(gPostCritDML);
try
JsonToSend := TStringStream.Create(sJson, TEncoding.UTF8);
Result := '';
try
idHttp1 := TIdHTTP.Create(nil);
idHttp1.HTTPOptions := [hoKeepOrigProtocol, hoForceEncodeParams];
idHttp1.ConnectTimeout := 2000;
idHttp1.Response.ContentType := 'application/json;charset=utf-8';
idHttp1.Request.Accept := 'application/json;charset=utf-8';
idHttp1.Request.ContentType := 'application/json;charset=utf-8';
idHttp1.Request.CharSet := 'utf-8';
try
Result := idHttp1.Post(sUrl, JsonToSend);
except
on E: Exception do
begin
SaveLogMsg('与后台服务通讯异常!' + e.Message);
end;
end;
finally
FreeAndNil(JsonToSend);
end;
finally
idHttp1.Free;
LeaveCriticalSection(gPostCritDML);
end;
end;
sJson是JSON格式的字符串,例如:sJson := '{"factoryTag":"02","num":1}'
GET
function HttpGet(sUrl: string): string;
var
idHttp1: TIdHTTP;
begin
EnterCriticalSection(gGetCritDML);
try
Result := '';
idHttp1 := TIdHTTP.Create(nil);
idHttp1.HTTPOptions := [hoKeepOrigProtocol, hoForceEncodeParams];
idHttp1.ConnectTimeout := 2000;
idHttp1.Response.ContentType := 'application/json;charset=utf-8';
idHttp1.Request.Accept := 'application/json;charset=utf-8';
idHttp1.Request.ContentType := 'application/json;charset=utf-8';
idHttp1.Request.CharSet := 'utf-8';
try
Result := idHttp1.Get(sUrl);
except
on E: Exception do
begin
SaveLogMsg(sUrl);
SaveLogMsg('与后台服务通讯异常!' + e.Message);
end;
end;
finally
idHttp1.Free;
LeaveCriticalSection(gGetCritDML);
end;
end;
JSON解析
导入System.JSON
function GetProduceId(cName: string; localComm: CLocalComm): string;
var
sRsp, sJson: string;
jRet: TJSONObject;
begin
Result := '';
sJson := '{"factoryTag":"02","num":1}';
sRsp := HttpPost(ReadConfStr('url', 'sc_url') + 'productIdBd', sJson);
if (sRsp <> '') and (Pos('{', sRsp) > 0) and (Pos('}', sRsp) > 0) then
begin
jRet := TJSONObject.ParseJSONValue(sRsp) as TJSONObject;
if jRet.GetValue('code').Value = '0000' then
begin
end;
end;
end;