|  | @@ -4,6 +4,7 @@ from typing import Any, Dict, List, Union
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  import httpx
 | 
	
		
			
				|  |  |  import requests
 | 
	
		
			
				|  |  | +import core.helper.ssrf_proxy as ssrf_proxy
 | 
	
		
			
				|  |  |  from core.tools.entities.tool_bundle import ApiBasedToolBundle
 | 
	
		
			
				|  |  |  from core.tools.entities.tool_entities import ToolInvokeMessage
 | 
	
		
			
				|  |  |  from core.tools.errors import ToolProviderCredentialValidationError
 | 
	
	
		
			
				|  | @@ -31,7 +32,7 @@ class ApiTool(Tool):
 | 
	
		
			
				|  |  |              runtime=Tool.Runtime(**meta)
 | 
	
		
			
				|  |  |          )
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -    def validate_credentials(self, credentials: Dict[str, Any], parameters: Dict[str, Any], format_only: bool = False) -> None:
 | 
	
		
			
				|  |  | +    def validate_credentials(self, credentials: Dict[str, Any], parameters: Dict[str, Any], format_only: bool = False) -> str:
 | 
	
		
			
				|  |  |          """
 | 
	
		
			
				|  |  |              validate the credentials for Api tool
 | 
	
		
			
				|  |  |          """
 | 
	
	
		
			
				|  | @@ -43,7 +44,7 @@ class ApiTool(Tool):
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |          response = self.do_http_request(self.api_bundle.server_url, self.api_bundle.method, headers, parameters)
 | 
	
		
			
				|  |  |          # validate response
 | 
	
		
			
				|  |  | -        self.validate_and_parse_response(response)
 | 
	
		
			
				|  |  | +        return self.validate_and_parse_response(response)
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      def assembling_request(self, parameters: Dict[str, Any]) -> Dict[str, Any]:
 | 
	
		
			
				|  |  |          headers = {}
 | 
	
	
		
			
				|  | @@ -201,23 +202,23 @@ class ApiTool(Tool):
 | 
	
		
			
				|  |  |          
 | 
	
		
			
				|  |  |          # do http request
 | 
	
		
			
				|  |  |          if method == 'get':
 | 
	
		
			
				|  |  | -            response = httpx.get(url, params=params, headers=headers, cookies=cookies, timeout=10, follow_redirects=True)
 | 
	
		
			
				|  |  | +            response = ssrf_proxy.get(url, params=params, headers=headers, cookies=cookies, timeout=10, follow_redirects=True)
 | 
	
		
			
				|  |  |          elif method == 'post':
 | 
	
		
			
				|  |  | -            response = httpx.post(url, params=params, headers=headers, cookies=cookies, data=body, timeout=10, follow_redirects=True)
 | 
	
		
			
				|  |  | +            response = ssrf_proxy.post(url, params=params, headers=headers, cookies=cookies, data=body, timeout=10, follow_redirects=True)
 | 
	
		
			
				|  |  |          elif method == 'put':
 | 
	
		
			
				|  |  | -            response = httpx.put(url, params=params, headers=headers, cookies=cookies, data=body, timeout=10, follow_redirects=True)
 | 
	
		
			
				|  |  | +            response = ssrf_proxy.put(url, params=params, headers=headers, cookies=cookies, data=body, timeout=10, follow_redirects=True)
 | 
	
		
			
				|  |  |          elif method == 'delete':
 | 
	
		
			
				|  |  |              """
 | 
	
		
			
				|  |  |              request body data is unsupported for DELETE method in standard http protocol
 | 
	
		
			
				|  |  |              however, OpenAPI 3.0 supports request body data for DELETE method, so we support it here by using requests
 | 
	
		
			
				|  |  |              """
 | 
	
		
			
				|  |  | -            response = requests.delete(url, params=params, headers=headers, cookies=cookies, data=body, timeout=10, allow_redirects=True)
 | 
	
		
			
				|  |  | +            response = ssrf_proxy.delete(url, params=params, headers=headers, cookies=cookies, data=body, timeout=10, allow_redirects=True)
 | 
	
		
			
				|  |  |          elif method == 'patch':
 | 
	
		
			
				|  |  | -            response = httpx.patch(url, params=params, headers=headers, cookies=cookies, data=body, timeout=10, follow_redirects=True)
 | 
	
		
			
				|  |  | +            response = ssrf_proxy.patch(url, params=params, headers=headers, cookies=cookies, data=body, timeout=10, follow_redirects=True)
 | 
	
		
			
				|  |  |          elif method == 'head':
 | 
	
		
			
				|  |  | -            response = httpx.head(url, params=params, headers=headers, cookies=cookies, timeout=10, follow_redirects=True)
 | 
	
		
			
				|  |  | +            response = ssrf_proxy.head(url, params=params, headers=headers, cookies=cookies, timeout=10, follow_redirects=True)
 | 
	
		
			
				|  |  |          elif method == 'options':
 | 
	
		
			
				|  |  | -            response = httpx.options(url, params=params, headers=headers, cookies=cookies, timeout=10, follow_redirects=True)
 | 
	
		
			
				|  |  | +            response = ssrf_proxy.options(url, params=params, headers=headers, cookies=cookies, timeout=10, follow_redirects=True)
 | 
	
		
			
				|  |  |          else:
 | 
	
		
			
				|  |  |              raise ValueError(f'Invalid http method {method}')
 | 
	
		
			
				|  |  |          
 |