1,593
社区成员
发帖
与我相关
我的任务
分享
uses
System.NetEncoding, System.Net.HttpClient, System.Net.HttpClientComponent, System.Net.URLClient.hpp;
function TForm1.PostMethod(Url, Data: String): String;
var
PostData : TStringList;
HTTP : TNetHTTPClient;
begin
PostData := TStringList.Create;
PostData.Values['data'] = Data;
HTTP := TNetHTTPClient.Create(Self);
HTTP.ConnectionTimeout := 3000; // 时间设短点
HTTP.ResponseTimeout := 8000; // 同上
// HTTP.ContentType := 'application/x-www-form-urlencoded';
// HTTP.SecureProtocols 需要经过测试,到底应当用那个或者哪些组合, 或者是空的 [] (组件默认)
HTTP.SecureProtocols := [THTTPSecureProtocol.SSL2]; // SSL2, SSL3, TLS1, TLS11, TLS12, TLS13
try
try
Result := HTTP.Post(Url, PostData).ContentAsString(TEncoding.UTF8);
except
on e: Exception do
begin
AddLog(e.Message); //这里是写入日志,忽略掉
end;
end;
finally
FreeAndNil(HTTP);
FreeAndNil(PostData);
end;
end;
const
//常量定义
C_NetAdd = 'XXXXXXX.cn/openapi2';
//SSL
C_Http = 'http://'; //http定义
C_Https = 'https://'; //https定义
//通讯的基础参数
C_ReadTimeout = 3000; //超时设置 3秒 (根据网络情况设置)
C_ContentType = 'application/x-www-form-urlencoded'; //数据内容类型 (不可改)
C_ContentEncoding = 'utf-8'; //数据内容字符集 (不可改)
C_UserAgent =
'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; Maxthon; .NET CLR 1.1.4322)';
C_AcceptLanguage = 'zh-cn';
var
V_Ssl :Boolean;//是否使用HTTPS
Function HttpPost(MsgSend: String; vUrl: String): String;
var
vHttp: TIdHTTP;
vIdSSL: TIdSSLIOHandlerSocketOpenSSL;
mStream: TStringStream;
FUrl: string;
begin
Result := '';
if (vUrl <> '') and (MsgSend <> '') then
begin
vHttp := TIdHTTP.Create(nil);
try
vHttp.ReadTimeout := C_ReadTimeout;
vHttp.Request.ContentType := C_ContentType;
vHttp.Request.ContentEncoding := C_ContentEncoding;
mStream := TStringStream.Create(MsgSend,CP_UTF8);
if V_Ssl then
begin
//使用https安全通讯方式
vIdSSL := TIdSSLIOHandlerSocketOpenSSL.Create(nil);
vHttp.IOHandler := vIdSSL;
FUrl := C_Https + vUrl;
end
else
begin
FUrl := C_Http + vUrl;
end;
//Post 数据
Result := vHttp.Post(FUrl,mStream);
finally
vHttp.Disconnect;
if V_Ssl then
vIdSSL.Destroy;
FreeAndNil(vHttp);
FreeAndNil(mStream);
end;
end
else
raise Exception.Create('发送信息或Url不能为空');
end;
procedure TForm1.Button1Click(Sender: TObject);
var
Data: String;
PostData: TStringStream;
begin
Data := '{"Member": "13455216875}';
PostData := TStringStream.Create(Data, TEncoding.UTF8, False);
ShowMessage(PostData.DataString);
end;