فهرست منبع

所有接口已完成;

scbc.sat2 5 سال پیش
والد
کامیت
a4b5fa7b5e
4فایلهای تغییر یافته به همراه479 افزوده شده و 5 حذف شده
  1. 69 0
      SATHTTP/SATHTTP/CurlClient.cpp
  2. 4 0
      SATHTTP/SATHTTP/CurlClient.h
  3. 332 1
      SATHTTP/SATHTTP/SATHTTP.cpp
  4. 74 4
      SATHTTP/SATHTTP/SATHTTP.h

+ 69 - 0
SATHTTP/SATHTTP/CurlClient.cpp

@@ -767,3 +767,72 @@ int CCurlClient::FormPosts(std::string url, std::multimap<std::string, std::stri
 
 	return res;
 }
+
+CURLcode CCurlClient::PostFile(std::string url, std::string text, std::string file, std::string& result, long time_out /* = 3000 */)
+{
+	CURLcode res;
+	CURL* curl = curl_easy_init();
+	if (NULL == curl)
+	{
+		return CURLE_FAILED_INIT;
+	}
+
+	if (m_bDebug)
+	{
+		curl_easy_setopt(curl, CURLOPT_VERBOSE, 1);
+		curl_easy_setopt(curl, CURLOPT_DEBUGFUNCTION, OnDebug);
+	}
+
+	// 表单参数;
+	std::string post;
+	CURLFORMcode rmcode;
+	struct curl_httppost* formpost = NULL;
+	struct curl_httppost* lastptr = NULL;
+	rmcode = curl_formadd(&formpost, &lastptr, CURLFORM_COPYNAME, "requestMsg", CURLFORM_COPYCONTENTS, text.c_str(), CURLFORM_END);
+	rmcode = curl_formadd(&formpost, &lastptr, CURLFORM_COPYNAME, "uploads", CURLFORM_FILECONTENT, file.c_str(), CURLFORM_END);
+
+	// 设置表单参数
+	res = curl_easy_setopt(curl, CURLOPT_HTTPPOST, formpost);
+
+	// 设置表头,表头内容可能不同
+	//m_headers = curl_slist_append(m_headers, "Content-Type:multipart/form-data");
+	//m_headers = curl_slist_append(m_headers, "Expect:");
+	//m_headers = curl_slist_append(m_headers, "Accept-Encoding:gzip, deflate");//Accept-Encodeing冒号后面加东西就上传失败;
+	//curl_easy_setopt(curl, CURLOPT_HTTPHEADER, m_headers); 
+
+	// 设置URL地址;
+	res = curl_easy_setopt(curl, CURLOPT_URL, url.c_str());
+	// 设置回调函数-读取;
+	res = curl_easy_setopt(curl, CURLOPT_READFUNCTION, NULL);
+	// 设置回调函数-写入;
+	res = curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, OnWriteData);
+	// 设置回调函数-写入的缓存区;
+	res = curl_easy_setopt(curl, CURLOPT_WRITEDATA, (void*)&result);
+	// 设置;
+	res = curl_easy_setopt(curl, CURLOPT_NOSIGNAL, 1);
+
+	curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, false);
+	curl_easy_setopt(curl, CURLOPT_SSL_VERIFYHOST, false);
+
+	curl_easy_setopt(curl, CURLOPT_AUTOREFERER, 1); // 以下3个为重定向设置
+	curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1); //返回的头部中有Location(一般直接请求的url没找到),则继续请求Location对应的数据 
+	curl_easy_setopt(curl, CURLOPT_MAXREDIRS, 1);//查找次数,防止查找太深
+	curl_easy_setopt(curl, CURLOPT_CONNECTTIMEOUT, 30);//连接超时,这个数值如果设置太短可能导致数据请求不到就断开了
+
+	// 设置超时值;
+	res = curl_easy_setopt(curl, CURLOPT_TIMEOUT, time_out);
+	// 设置头;
+	res = curl_easy_setopt(curl, CURLOPT_HTTPHEADER, m_headers);
+
+	// 执行POST提交;
+	res = curl_easy_perform(curl);
+
+	// 释放资源;
+	curl_easy_cleanup(curl);
+	//curl_global_cleanup();
+	ClearHeaders(); /* free the header list */
+	// 释放表单
+	curl_formfree(formpost);
+
+	return res;
+}

+ 4 - 0
SATHTTP/SATHTTP/CurlClient.h

@@ -93,6 +93,10 @@ private:
 	static size_t OnWriteFile(const void* ptr, size_t size, size_t nmemb, void* stream);
 	static size_t OnGetContentLength(void* ptr, size_t size, size_t nmemb, void* stream);
 
+public:
+	// 非通用接口,根据具体项目实现;
+	CURLcode PostFile(std::string url, std::string text, std::string file, std::string& result, long time_out = 3000);
+
 };
 
 #endif

+ 332 - 1
SATHTTP/SATHTTP/SATHTTP.cpp

@@ -1183,4 +1183,335 @@ SATHTTP_API int DownloadScript(std::string url, std::string strCaseId, std::stri
 	}
 
 	return FALSE;
-}
+}
+
+
+SATHTTP_API int StopTaskFromRunner(std::string url, std::string strInstnaceId, SATParameters::STStopTaskResp &stStopTaskResp)
+{
+	// 转化为Json;
+	cJSON *pRoot = cJSON_CreateObject();
+	if ( pRoot == NULL )
+	{
+		return -1;
+	}
+
+	ASSERT(cJSON_AddStringToObject(pRoot, "sysCode", ""));
+	ASSERT(cJSON_AddStringToObject(pRoot, "function", ""));
+	cJSON *pData = cJSON_CreateObject();
+	if ( pData )
+	{
+		ASSERT(cJSON_AddStringToObject(pData, "instanceId", strInstnaceId.c_str()));
+		// 添加到根结点中;
+		cJSON_AddItemToObject(pRoot, "data", pData);
+	}
+
+	char *pText = cJSON_Print(pRoot);
+	std::string post_data = "requestMsg=";
+	post_data.append(CharEncoding::EnCode_UTF8URL(pText));
+
+	// 释放堆内存;
+	if (pText)
+		delete pText;
+	pText = NULL;
+
+	if ( pRoot )
+		cJSON_Delete(pRoot);
+	pRoot = NULL;		
+
+	CCurlClient curl;
+	std::string reponse;	
+	CURLcode curlCode = CURLE_OK;
+	if ( CURLE_OK == curl.Initialize() )
+	{
+		if (_tcsstr(url.c_str(), "https://") || _tcsstr(url.c_str(), "HTTPS://") )
+			curlCode = curl.Posts(url, post_data, reponse);
+		else
+			curlCode = curl.Post(url, post_data, reponse);
+
+		if ( curlCode == CURLE_OK )
+		{
+			reponse = CharEncoding::DeCode_URLUTF8(reponse.c_str());
+
+			// 解析返回值;
+			pRoot = cJSON_Parse(reponse.c_str());
+			if (pRoot != NULL)
+			{
+				cJSON *pMsg = cJSON_GetObjectItem(pRoot, "responseMsg");
+				if ( pMsg )
+				{
+					stStopTaskResp.strCode = cJSON_GetObjectItem(pMsg, "code") ? cJSON_GetObjectItem(pMsg, "code")->valuestring : "";
+					stStopTaskResp.strMessage = cJSON_GetObjectItem(pMsg, "message") ? cJSON_GetObjectItem(pMsg, "message")->valuestring : "";
+					stStopTaskResp.strStr = cJSON_GetObjectItem(pMsg, "str") ? (cJSON_GetObjectItem(pMsg, "str")->valuestring ? cJSON_GetObjectItem(pMsg, "str")->valuestring : "") : "";
+					stStopTaskResp.strStr = cJSON_GetObjectItem(pMsg, "str") ? (cJSON_GetObjectItem(pMsg, "str")->valuestring ? cJSON_GetObjectItem(pMsg, "str")->valuestring : "") : "";
+					if ( stStopTaskResp.strCode == "00" )
+					{				
+						// 释放内存;
+						cJSON_Delete(pRoot);
+						// 返回结果;
+						return TRUE;
+					}
+				}
+
+				// 错误产生,可输出msg方便查询;
+				cJSON_Delete(pRoot);	
+			}
+		}
+	}
+
+	return FALSE;
+}
+
+SATHTTP_API int SaveCaseOrTaskLog(std::string url, const SATParameters::STSaveLogReq &stSaveLogReq, SATParameters::STSaveLogResp &stSaveLogResp)
+{
+	// 转化为Json;
+	cJSON *pRoot = cJSON_CreateObject();
+	if ( pRoot == NULL )
+	{
+		return -1;
+	}
+
+	ASSERT(cJSON_AddStringToObject(pRoot, "useId", stSaveLogReq.strUserId.c_str()));
+	cJSON *pData = cJSON_CreateObject();
+	if ( pData )
+	{
+		ASSERT(cJSON_AddStringToObject(pData, "fileType", stSaveLogReq.strFileType.c_str()));
+		ASSERT(cJSON_AddStringToObject(pData, "caseId", stSaveLogReq.strCaseId.c_str()));
+		ASSERT(cJSON_AddStringToObject(pData, "taskId", stSaveLogReq.strTaskId.c_str()));
+		ASSERT(cJSON_AddStringToObject(pData, "executeId", stSaveLogReq.strExecuteId.c_str()));
+
+		// 添加到根结点中;
+		cJSON_AddItemToObject(pRoot, "data", pData);
+	}
+
+	char *pText = cJSON_Print(pRoot);
+	std::string post_data = CharEncoding::EnCode_UTF8URL(pText);
+
+	// 释放堆内存;
+	if (pText)
+		delete pText;
+	pText = NULL;
+
+	if ( pRoot )
+		cJSON_Delete(pRoot);
+	pRoot = NULL;		
+
+	CCurlClient curl;
+	std::string reponse;	
+	CURLcode curlCode = CURLE_OK;
+	if ( CURLE_OK == curl.Initialize() )
+	{
+		if (_tcsstr(url.c_str(), "https://") || _tcsstr(url.c_str(), "HTTPS://") )
+			curlCode = curl.Posts(url, post_data, reponse);
+		else
+			curlCode = curl.PostFile(url, post_data, stSaveLogReq.strUploads, reponse);
+
+		if ( curlCode == CURLE_OK )
+		{
+			reponse = CharEncoding::DeCode_URLUTF8(reponse.c_str());
+
+			// 解析返回值;
+			pRoot = cJSON_Parse(reponse.c_str());
+			if (pRoot != NULL)
+			{
+				cJSON *pMsg = cJSON_GetObjectItem(pRoot, "responseMsg");
+				if ( pMsg )
+				{
+					stSaveLogResp.strCode = cJSON_GetObjectItem(pMsg, "code") ? cJSON_GetObjectItem(pMsg, "code")->valuestring : "";
+					stSaveLogResp.strMessage = cJSON_GetObjectItem(pMsg, "message") ? cJSON_GetObjectItem(pMsg, "message")->valuestring : "";
+					stSaveLogResp.strStr = cJSON_GetObjectItem(pMsg, "str") ? (cJSON_GetObjectItem(pMsg, "str")->valuestring ? cJSON_GetObjectItem(pMsg, "str")->valuestring : "") : "";
+					stSaveLogResp.strData = cJSON_GetObjectItem(pMsg, "data") ? (cJSON_GetObjectItem(pMsg, "data")->valuestring ? cJSON_GetObjectItem(pMsg, "data")->valuestring : "") : "";
+					if ( stSaveLogResp.strCode == "00" )
+					{				
+						// 释放内存;
+						cJSON_Delete(pRoot);
+						// 返回结果;
+						return TRUE;
+					}
+				}
+
+				// 错误产生,可输出msg方便查询;
+				cJSON_Delete(pRoot);	
+			}
+		}
+	}
+
+	return FALSE;
+}
+
+
+SATHTTP_API int SaveResultFile(std::string url, const SATParameters::STSaveFileReq &stSaveFileReq, SATParameters::STSaveFileResp &stSaveFileResp) 
+{
+	// 转化为Json;
+	cJSON *pRoot = cJSON_CreateObject();
+	if ( pRoot == NULL )
+	{
+		return -1;
+	}
+
+	ASSERT(cJSON_AddStringToObject(pRoot, "sysCode", ""));
+	ASSERT(cJSON_AddStringToObject(pRoot, "function", ""));
+	cJSON *pData = cJSON_CreateObject();
+	if ( pData )
+	{
+		ASSERT(cJSON_AddStringToObject(pData, "roundNum", stSaveFileReq.strRoundNum.c_str()));
+		ASSERT(cJSON_AddStringToObject(pData, "caseRepeat", stSaveFileReq.strCaseRepeat.c_str()));
+		ASSERT(cJSON_AddStringToObject(pData, "jobRepeat", stSaveFileReq.strJobRepeat.c_str()));
+		ASSERT(cJSON_AddStringToObject(pData, "instanceId", stSaveFileReq.strInstanceId.c_str()));
+
+		ASSERT(cJSON_AddStringToObject(pData, "deviceId", stSaveFileReq.strDeviceId.c_str()));
+		ASSERT(cJSON_AddStringToObject(pData, "executeId", stSaveFileReq.strExecuteId.c_str()));
+		ASSERT(cJSON_AddStringToObject(pData, "taskName", stSaveFileReq.strTaskName.c_str()));
+		ASSERT(cJSON_AddStringToObject(pData, "sceneIndex", stSaveFileReq.strSceneIndex.c_str()));
+		ASSERT(cJSON_AddStringToObject(pData, "taskId", stSaveFileReq.strTaskId.c_str()));
+		ASSERT(cJSON_AddStringToObject(pData, "caseId", stSaveFileReq.strCaseId.c_str()));
+		ASSERT(cJSON_AddStringToObject(pData, "deviceName", stSaveFileReq.strDeviceName.c_str()));
+		ASSERT(cJSON_AddStringToObject(pData, "runnerName", stSaveFileReq.strRunnerName.c_str()));
+		ASSERT(cJSON_AddStringToObject(pData, "runnerIP", stSaveFileReq.strRunnerIP.c_str()));
+		ASSERT(cJSON_AddStringToObject(pData, "runnerMac", stSaveFileReq.strRunnerMAC.c_str()));
+		ASSERT(cJSON_AddStringToObject(pData, "caseName", stSaveFileReq.strCaseName.c_str()));
+		ASSERT(cJSON_AddStringToObject(pData, "caseIndex", stSaveFileReq.strCaseIndex.c_str()));
+		ASSERT(cJSON_AddStringToObject(pData, "taskRepeat", stSaveFileReq.strTaskRepeat.c_str()));
+		ASSERT(cJSON_AddStringToObject(pData, "busCode", stSaveFileReq.strBusCode.c_str()));
+		ASSERT(cJSON_AddStringToObject(pData, "fileType", stSaveFileReq.strFileType.c_str()));
+		ASSERT(cJSON_AddStringToObject(pData, "caseStep", stSaveFileReq.strCaseStep.c_str()));
+
+		// 添加到根结点中;
+		cJSON_AddItemToObject(pRoot, "data", pData);
+	}
+
+	char *pText = cJSON_Print(pRoot);
+	std::string post_data = CharEncoding::EnCode_UTF8URL(pText);
+
+	// 释放堆内存;
+	if (pText)
+		delete pText;
+	pText = NULL;
+
+	if ( pRoot )
+		cJSON_Delete(pRoot);
+	pRoot = NULL;		
+
+	CCurlClient curl;
+	std::string reponse;	
+	CURLcode curlCode = CURLE_OK;
+	if ( CURLE_OK == curl.Initialize() )
+	{
+		if (_tcsstr(url.c_str(), "https://") || _tcsstr(url.c_str(), "HTTPS://") )
+			curlCode = curl.Posts(url, post_data, reponse);
+		else
+			curlCode = curl.PostFile(url, post_data, stSaveFileReq.strUploads, reponse);
+
+		if ( curlCode == CURLE_OK )
+		{
+			reponse = CharEncoding::DeCode_URLUTF8(reponse.c_str());
+
+			// 解析返回值;
+			pRoot = cJSON_Parse(reponse.c_str());
+			if (pRoot != NULL)
+			{
+				cJSON *pMsg = cJSON_GetObjectItem(pRoot, "responseMsg");
+				if ( pMsg )
+				{
+					stSaveFileResp.strCode = cJSON_GetObjectItem(pMsg, "code") ? cJSON_GetObjectItem(pMsg, "code")->valuestring : "";
+					stSaveFileResp.strMessage = cJSON_GetObjectItem(pMsg, "message") ? cJSON_GetObjectItem(pMsg, "message")->valuestring : "";
+					stSaveFileResp.strStr = cJSON_GetObjectItem(pMsg, "str") ? (cJSON_GetObjectItem(pMsg, "str")->valuestring ? cJSON_GetObjectItem(pMsg, "str")->valuestring : "") : "";
+					stSaveFileResp.strData = cJSON_GetObjectItem(pMsg, "data") ? (cJSON_GetObjectItem(pMsg, "data")->valuestring ? cJSON_GetObjectItem(pMsg, "data")->valuestring : "") : "";
+					if ( stSaveFileResp.strCode == "00" )
+					{				
+						// 释放内存;
+						cJSON_Delete(pRoot);
+						// 返回结果;
+						return TRUE;
+					}
+				}
+
+				// 错误产生,可输出msg方便查询;
+				cJSON_Delete(pRoot);	
+			}
+		}
+	}
+
+	return FALSE;
+}
+
+SATHTTP_API int SaveResultImg(std::string url, const SATParameters::STSaveImgReq &stSaveImgReq, SATParameters::STSaveImgResp &stSaveImgResp)
+{
+	// 转化为Json;
+	cJSON *pRoot = cJSON_CreateObject();
+	if ( pRoot == NULL )
+	{
+		return -1;
+	}
+
+	ASSERT(cJSON_AddStringToObject(pRoot, "sysCode", ""));
+	ASSERT(cJSON_AddStringToObject(pRoot, "function", ""));
+	cJSON *pData = cJSON_CreateObject();
+	if ( pData )
+	{
+		ASSERT(cJSON_AddStringToObject(pData, "instanceId", stSaveImgReq.strInstanceId.c_str()));
+		ASSERT(cJSON_AddStringToObject(pData, "deviceId", stSaveImgReq.strDeviceId.c_str()));
+		ASSERT(cJSON_AddStringToObject(pData, "roundNum", stSaveImgReq.strRoundNum.c_str()));
+		ASSERT(cJSON_AddStringToObject(pData, "caseId", stSaveImgReq.strCaseId.c_str()));
+		ASSERT(cJSON_AddStringToObject(pData, "step", stSaveImgReq.strCaseStep.c_str()));
+		ASSERT(cJSON_AddStringToObject(pData, "type", stSaveImgReq.strTaskType.c_str()));
+		ASSERT(cJSON_AddStringToObject(pData, "executeId", stSaveImgReq.strExecuteId.c_str()));
+		ASSERT(cJSON_AddStringToObject(pData, "caseRepeat", stSaveImgReq.strCaseRepeat.c_str()));
+		ASSERT(cJSON_AddStringToObject(pData, "jobRepeat", stSaveImgReq.strJobRepeat.c_str()));
+		// 添加到根结点中;
+		cJSON_AddItemToObject(pRoot, "data", pData);
+	}
+
+	char *pText = cJSON_Print(pRoot);
+	std::string post_data = CharEncoding::EnCode_UTF8URL(pText);
+
+	// 释放堆内存;
+	if (pText)
+		delete pText;
+	pText = NULL;
+
+	if ( pRoot )
+		cJSON_Delete(pRoot);
+	pRoot = NULL;		
+
+	CCurlClient curl;
+	std::string reponse;	
+	CURLcode curlCode = CURLE_OK;
+	if ( CURLE_OK == curl.Initialize() )
+	{
+		if (_tcsstr(url.c_str(), "https://") || _tcsstr(url.c_str(), "HTTPS://") )
+			curlCode = curl.Posts(url, post_data, reponse);
+		else
+			curlCode = curl.PostFile(url, post_data, stSaveImgReq.strUploads, reponse);
+
+		if ( curlCode == CURLE_OK )
+		{
+			reponse = CharEncoding::DeCode_URLUTF8(reponse.c_str());
+
+			// 解析返回值;
+			pRoot = cJSON_Parse(reponse.c_str());
+			if (pRoot != NULL)
+			{
+				cJSON *pMsg = cJSON_GetObjectItem(pRoot, "responseMsg");
+				if ( pMsg )
+				{
+					stSaveImgResp.strCode = cJSON_GetObjectItem(pMsg, "code") ? cJSON_GetObjectItem(pMsg, "code")->valuestring : "";
+					stSaveImgResp.strMessage = cJSON_GetObjectItem(pMsg, "message") ? cJSON_GetObjectItem(pMsg, "message")->valuestring : "";
+					stSaveImgResp.strStr = cJSON_GetObjectItem(pMsg, "str") ? (cJSON_GetObjectItem(pMsg, "str")->valuestring ? cJSON_GetObjectItem(pMsg, "str")->valuestring : "") : "";
+					stSaveImgResp.strData = cJSON_GetObjectItem(pMsg, "data") ? (cJSON_GetObjectItem(pMsg, "data")->valuestring ? cJSON_GetObjectItem(pMsg, "data")->valuestring : "") : "";
+					if ( stSaveImgResp.strCode == "00" )
+					{				
+						// 释放内存;
+						cJSON_Delete(pRoot);
+						// 返回结果;
+						return TRUE;
+					}
+				}
+
+				// 错误产生,可输出msg方便查询;
+				cJSON_Delete(pRoot);	
+			}
+		}
+	}
+
+	return FALSE;
+}

+ 74 - 4
SATHTTP/SATHTTP/SATHTTP.h

@@ -263,6 +263,13 @@ namespace SATParameters{
 
 	//////////////////////////////////////////////////////////////////////////
 	// 7、保存用例脚本或任务日志;
+	typedef struct __ST_STOP_TASK_RESP__:__ST_RESPONE__
+	{
+		std::string strData;
+	}STStopTaskResp, *pSTStopTaskResp;
+
+	//////////////////////////////////////////////////////////////////////////
+	// 8、保存用例脚本或任务日志;
 	typedef struct __ST_SAVE_LOG_REQ__
 	{
 		std::string strUserId;
@@ -272,6 +279,66 @@ namespace SATParameters{
 		std::string strExecuteId;
 		std::string strUploads;		// 要上传的文件;
 	}STSaveLogReq, *pSTSaveLogReq;
+
+	typedef struct __ST_SAVE_LOG_RESP__:__ST_RESPONE__
+	{
+		std::string strData;
+	}STSaveLogResp, *pSTSaveLogResp;
+
+	//////////////////////////////////////////////////////////////////////////
+	// 8、保存用例脚本或任务日志;
+	typedef struct __ST_SAVE_FILE_REQ__
+	{
+		std::string strRoundNum;
+		std::string strCaseRepeat;
+		std::string strJobRepeat;
+		std::string strInstanceId;
+		std::string strDeviceId;
+		std::string strExecuteId;
+		std::string strTaskName;
+		std::string strSceneIndex;
+		std::string strTaskId;
+		std::string strCaseId;
+		std::string strDeviceName;
+		std::string strRunnerName;
+		std::string strRunnerIP;
+		std::string strRunnerMAC;
+		std::string strCaseName;
+		std::string strCaseIndex;
+		std::string strTaskRepeat;
+		std::string strBusCode;
+		std::string strFileType;
+		std::string strCaseStep;
+		// 要上传的文件;
+		std::string strUploads;
+	}STSaveFileReq, *pSTSaveFileReq;
+
+	typedef struct __ST_SAVE_FILE_RESP__:__ST_RESPONE__
+	{
+		std::string strData;
+	}STSaveFileResp, *pSTSaveFileResp;
+
+	//////////////////////////////////////////////////////////////////////////
+	// 9、保存用例图片;
+	typedef struct __ST_SAVE_IMG_REQ__
+	{
+		std::string strInstanceId;
+		std::string strDeviceId;
+		std::string strRoundNum;
+		std::string strCaseId;
+		std::string strCaseStep;
+		std::string strTaskType;
+		std::string strExecuteId;
+		std::string strCaseRepeat;
+		std::string strJobRepeat;
+		// 要上传的文件;
+		std::string strUploads;
+	}STSaveImgReq, *pSTSaveImgReq;
+
+	typedef struct __ST_SAVE_IMG_RESP__:__ST_RESPONE__
+	{
+		std::string strData;
+	}STSaveImgResp, *pSTSaveImgResp;
 }
 
 extern SATHTTP_API int nSATHTTP;
@@ -295,13 +362,16 @@ SATHTTP_API int SetResultList(std::string url, const SATParameters::STJobProcess
 SATHTTP_API int GetCaseFileListUrl(std::string url, std::string strCaseId, SATParameters::STScriptUrlResp &stScriptUrlResp) throw();
 SATHTTP_API int DownloadScript(std::string url, std::string strCaseId, std::string strSaveDir, SATParameters::STScriptUrlResp &stScriptUrlResp) throw();
 
+// 停止Runner上的任务;
+// 注意:strInstnaceId暂时未确定是STTask.Id还是STTask.nInstanceId;
+SATHTTP_API int StopTaskFromRunner(std::string url, std::string strInstnaceId, SATParameters::STStopTaskResp &stStopTaskResp) throw();
+
+SATHTTP_API int SaveCaseOrTaskLog(std::string url, const SATParameters::STSaveLogReq &stSaveLogReq, SATParameters::STSaveLogResp &stSaveLogResp) throw();
+SATHTTP_API int SaveResultFile(std::string url, const SATParameters::STSaveFileReq &stSaveFileReq, SATParameters::STSaveFileResp &stSaveFileResp) throw();
+SATHTTP_API int SaveResultImg(std::string url, const SATParameters::STSaveImgReq &stSaveImgReq, SATParameters::STSaveImgResp &stSaveImgResp) throw();
 SATHTTP_API int GetIdNumber();
-SATHTTP_API int StopTaskFromRunner();
 SATHTTP_API int GetPyCaseInfo();
 SATHTTP_API int GetCaseInfo();
-SATHTTP_API int SaveCaseOrTaskLog();
-SATHTTP_API int SaveResultFile();
-SATHTTP_API int SaveResultImg();