Jelajahi Sumber

do not wait for response body when making a HEAD request

Patrick Wuttke 6 tahun lalu
induk
melakukan
2cd68a2566
2 mengubah file dengan 11 tambahan dan 0 penghapusan
  1. 10 0
      core/io/http_client.cpp
  2. 1 0
      core/io/http_client.h

+ 10 - 0
core/io/http_client.cpp

@@ -171,6 +171,7 @@ Error HTTPClient::request_raw(Method p_method, const String &p_url, const Vector
 	}
 
 	status = STATUS_REQUESTING;
+	head_request = p_method == METHOD_HEAD;
 
 	return OK;
 }
@@ -226,6 +227,7 @@ Error HTTPClient::request(Method p_method, const String &p_url, const Vector<Str
 	}
 
 	status = STATUS_REQUESTING;
+	head_request = p_method == METHOD_HEAD;
 
 	return OK;
 }
@@ -267,6 +269,7 @@ void HTTPClient::close() {
 
 	connection.unref();
 	status = STATUS_DISCONNECTED;
+	head_request = false;
 	if (resolving != IP::RESOLVER_INVALID_ID) {
 
 		IP::get_singleton()->erase_resolve_item(resolving);
@@ -468,6 +471,12 @@ Error HTTPClient::poll() {
 						}
 					}
 
+					// This is a HEAD request, we wont receive anything.
+					if (head_request) {
+						body_size = 0;
+						body_left = 0;
+					}
+
 					if (body_size != -1 || chunked) {
 
 						status = STATUS_BODY;
@@ -718,6 +727,7 @@ HTTPClient::HTTPClient() {
 	tcp_connection.instance();
 	resolving = IP::RESOLVER_INVALID_ID;
 	status = STATUS_DISCONNECTED;
+	head_request = false;
 	conn_port = -1;
 	body_size = -1;
 	chunked = false;

+ 1 - 0
core/io/http_client.h

@@ -166,6 +166,7 @@ private:
 	bool ssl_verify_host;
 	bool blocking;
 	bool handshaking;
+	bool head_request;
 
 	Vector<uint8_t> response_str;