type TwmsThreadpostJson = class(TThread) private Furl: string; Fpostcmd: string; FResult: string; FBOOL: Boolean; protected procedure Execute; override; end; class function TWmsApplicationfunction.postjson(url, postcmd: string): string; var FThread: TwmsThreadpostJson; begin if booleanshowflash then cxSetSplashVisibility(Application.MainForm <> nil, ''); try FThread := TwmsThreadpostJson.Create; FThread.Furl := url; FThread.Fpostcmd := postcmd; FThread.FBOOL := False; FThread.Resume; while true do begin Application.ProcessMessages; if FThread.FBOOL then //等待子线程执行完毕 begin cxSetSplashVisibility(False, ''); Result := FThread.FResult; FThread.Free; Break; end; end; except end procedure TwmsThreadpostJson.Execute; var strStream: TStringStream; strStream1: TStringStream; IdHTTP: Tidhttp; AJson: TQJson; passuess: boolean; strData: string; Strtemp: string; strRadom: string; strDes: string; pub, pri: TFGInt; begin Fresult := ''; IdHTTP := Tidhttp.create(nil); try IdHTTP.Request.CustomHeaders.clear; IdHTTP.Request.RawHeaders.values['Cookie'] := yundawms.returncookek; IdHTTP.HandleRedirects := true; IdHTTP.Request.CustomHeaders.Add('Cookie: ' + yundawms.returncookek); IdHTTP.Request.Connection := 'Keep-Alive'; IdHTTP.Request.UserAgent := 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; Maxthon)'; // IdHTTP.Request.ContentType:='application/x-www-form-urlencoded;charset=UTF-8'; IdHTTP.Request.Accept := 'image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/vnd.ms-excel, application/msword, */*'; IdHTTP.Request.AcceptLanguage := 'zh-cn'; IdHTTP.Request.AcceptEncoding := 'gzip, deflate'; IdHTTP.Request.CacheControl := 'no-cache'; IdHTTP.ReadTimeout := 1200000; IdHTTP.ConnectTimeout := 1200000; IdHTTP.Request.ContentType := 'application/json;charset=UTF-8'; IdHTTP.Request.AcceptCharSet := 'UTF-8'; IdHTTP.Request.AcceptEncoding := 'UTF-8'; IdHTTP.Request.AcceptLanguage := 'UTF-8'; IdHTTP.Request.CharSet := 'UTF-8'; // IdHTTP1.CookieManager := IdCookieManager1; IdHTTP.HTTPOptions := IdHTTP.HTTPOptions + [hoKeepOrigProtocol]; // 关键这行 IdHTTP.ProtocolVersion := pv1_1; AJson := TQJson.Create; passuess := false; try AJson.Parse(Fpostcmd); if Assigned(AJson.ItemByPath('username')) then AJson.ItemByPath('username').value := Tyundawms.getwmsuser; Strtemp := inttostr(ConvertDelphiDateTimeToJavaDateTime(now)); try AJson.AddVariant('dateTime', Strtemp); except end; strData := Tyundawms.getwmsuser + Tyundawms.getwmspassword + Strtemp; AJson.AddVariant('validation', TWmsApplicationfunction.Getmd5(strData)); passuess := true; Fpostcmd := AJson.AsString; if passuess = true then strStream := TStringStream.create(Fpostcmd, TEncoding.UTF8) else exit; finally AJson.Free; end; try yundawms.AppService.GeneralUtility.retmain('log:post' + ' url:' + Furl + ' date:' + Fpostcmd); except // raise Exception.Create('postjson:记录日志异常!'); end; strStream1 := TStringStream.create('', TEncoding.UTF8); try IdHTTP.Post(Furl, strStream, strStream1); Fresult := strStream1.DataString; Fresult := StringReplace(Fresult, 'u008F', '', [rfReplaceAll]); //含有的特殊字符 替换为空 Fresult := StringReplace(Fresult, 'u00A0', ' ', [rfReplaceAll]); //含有全角字符替换 全角字符会乱码 except raise Exception.Create('postjson:服务器链接失败,请检查【网络】是否正常!'); Fresult := ''; end; try yundawms.AppService.GeneralUtility.retmain('log:get' + ' url:' + Furl + ' resultdate:' + Fresult); except end; finally IdHTTP.Disconnect; if Assigned(IdHTTP) then freeandnil(IdHTTP); if Assigned(strStream) then freeandnil(strStream); if Assigned(strStream1) then freeandnil(strStream1); FBOOL := True; end; end;
转:https://www.cnblogs.com/yangxuming/p/8086779.html