Browse Source

Add http method and request data parameters

For HTTPRequest::request
Kazuo256 9 years ago
parent
commit
c53e5c555a
2 changed files with 11 additions and 5 deletions
  1. 8 4
      scene/main/http_request.cpp
  2. 3 1
      scene/main/http_request.h

+ 8 - 4
scene/main/http_request.cpp

@@ -96,7 +96,7 @@ Error HTTPRequest::_parse_url(const String& p_url) {
 	return OK;
 }
 
-Error HTTPRequest::request(const String& p_url, const Vector<String>& p_custom_headers, bool p_ssl_validate_domain) {
+Error HTTPRequest::request(const String& p_url, const Vector<String>& p_custom_headers, bool p_ssl_validate_domain, HTTPClient::Method p_method, const String& p_request_data) {
 
 	ERR_FAIL_COND_V(!is_inside_tree(),ERR_UNCONFIGURED);
 	if ( requesting ) {
@@ -104,6 +104,8 @@ Error HTTPRequest::request(const String& p_url, const Vector<String>& p_custom_h
 		ERR_FAIL_V(ERR_BUSY);
 	}
 
+	method=p_method;
+
 	Error err = _parse_url(p_url);
 	if (err)
 		return err;
@@ -114,6 +116,8 @@ Error HTTPRequest::request(const String& p_url, const Vector<String>& p_custom_h
 	bool has_accept=false;
 	headers=p_custom_headers;
 
+	request_data = p_request_data;
+
 	for(int i=0;i<headers.size();i++) {
 
 		if (headers[i].findn("user-agent:")==0)
@@ -281,7 +285,7 @@ bool HTTPRequest::_update_connection() {
 	switch( client->get_status() ) {
 		case HTTPClient::STATUS_DISCONNECTED: {
 			call_deferred("_request_done",RESULT_CANT_CONNECT,0,StringArray(),ByteArray());
-			return true; //end it, since it's doing something			
+			return true; //end it, since it's doing something
 		} break;
 		case HTTPClient::STATUS_RESOLVING: {
 			client->poll();
@@ -334,7 +338,7 @@ bool HTTPRequest::_update_connection() {
 			} else {
 				//did not request yet, do request
 
-				Error err = client->request(HTTPClient::METHOD_GET,request_string,headers);
+				Error err = client->request(method,request_string,headers,request_data);
 				if (err!=OK) {
 					call_deferred("_request_done",RESULT_CONNECTION_ERROR,0,StringArray(),ByteArray());
 					return true;
@@ -531,7 +535,7 @@ int HTTPRequest::get_body_size() const{
 
 void HTTPRequest::_bind_methods() {
 
-	ObjectTypeDB::bind_method(_MD("request","url","custom_headers","ssl_validate_domain"),&HTTPRequest::request,DEFVAL(StringArray()),DEFVAL(true));
+	ObjectTypeDB::bind_method(_MD("request","url","custom_headers","ssl_validate_domain","method","request_data"),&HTTPRequest::request,DEFVAL(StringArray()),DEFVAL(true),DEFVAL(HTTPClient::METHOD_GET),DEFVAL(String()));
 	ObjectTypeDB::bind_method(_MD("cancel_request"),&HTTPRequest::cancel_request);
 
 	ObjectTypeDB::bind_method(_MD("get_http_client_status"),&HTTPRequest::get_http_client_status);

+ 3 - 1
scene/main/http_request.h

@@ -66,6 +66,8 @@ private:
 	Vector<String> headers;
 	bool validate_ssl;
 	bool use_ssl;
+	HTTPClient::Method method;
+	String request_data;
 
 	bool request_sent;
 	Ref<HTTPClient> client;
@@ -114,7 +116,7 @@ protected:
 	static void _bind_methods();
 public:
 
-	Error request(const String& p_url,const Vector<String>& p_custom_headers=Vector<String>(),bool p_ssl_validate_domain=true); //connects to a full url and perform request
+	Error request(const String& p_url, const Vector<String>& p_custom_headers=Vector<String>(), bool p_ssl_validate_domain=true, HTTPClient::Method p_method=HTTPClient::METHOD_GET, const String& p_request_data=""); //connects to a full url and perform request
 	void cancel_request();
 	HTTPClient::Status get_http_client_status() const;