diff --git a/src/hlua.c b/src/hlua.c
index a7ed113..d3c7684 100644
--- a/src/hlua.c
+++ b/src/hlua.c
@@ -7038,7 +7038,7 @@
  * in the lua buffer, once the httpclient finished its job, push the result on
  * the stack
  */
-__LJMP static int hlua_httpclient_get_yield(lua_State *L, int status, lua_KContext ctx)
+__LJMP static int hlua_httpclient_send_yield(lua_State *L, int status, lua_KContext ctx)
 {
 	struct buffer *tr;
 	int res;
@@ -7076,7 +7076,7 @@
 		task_wakeup(hlua->task, TASK_WOKEN_MSG);
 
 
-	MAY_LJMP(hlua_yieldk(L, 0, 0, hlua_httpclient_get_yield, TICK_ETERNITY, 0));
+	MAY_LJMP(hlua_yieldk(L, 0, 0, hlua_httpclient_send_yield, TICK_ETERNITY, 0));
 	return 0;
 }
 
@@ -7152,12 +7152,10 @@
 
 
 /*
- * Sends and receive an HTTP request
- *
- * httpclient.get(url, headers)
+ * Send an HTTP request and wait for a response
  */
 
-__LJMP static int hlua_httpclient_get(lua_State *L)
+__LJMP static int hlua_httpclient_send(lua_State *L, enum http_meth_t meth)
 {
 	struct hlua_httpclient *hlua_hc;
 	struct http_hdr *hdrs = NULL;
@@ -7202,7 +7200,7 @@
 	hlua_hc = hlua_checkhttpclient(L, 1);
 
 	hlua_hc->hc->req.url = istdup(ist(url_str));
-	hlua_hc->hc->req.meth = HTTP_METH_GET;
+	hlua_hc->hc->req.meth = meth;
 
 	/* update the httpclient callbacks */
 	hlua_hc->hc->ops.res_stline = hlua_httpclient_res_cb;
@@ -7211,7 +7209,7 @@
 	hlua_hc->hc->ops.res_end = hlua_httpclient_res_cb;
 
 
-	httpclient_req_gen(hlua_hc->hc, hlua_hc->hc->req.url, HTTP_METH_GET, hdrs, ist(body_str));
+	httpclient_req_gen(hlua_hc->hc, hlua_hc->hc->req.url, meth, hdrs, ist(body_str));
 	httpclient_start(hlua_hc->hc);
 
 	/* free the temporary headers array */
@@ -7231,11 +7229,63 @@
 	luaL_buffinit(L, &hlua_hc->b);
 	lua_pushstring(L, "body");
 
-	MAY_LJMP(hlua_yieldk(L, 0, 0, hlua_httpclient_get_yield, TICK_ETERNITY, 0));
+	MAY_LJMP(hlua_yieldk(L, 0, 0, hlua_httpclient_send_yield, TICK_ETERNITY, 0));
 	return 0;
 }
 
 /*
+ * Sends an HTTP HEAD request and wait for a response
+ *
+ * httpclient:head(url, headers, payload)
+ */
+__LJMP static int hlua_httpclient_head(lua_State *L)
+{
+	return hlua_httpclient_send(L, HTTP_METH_HEAD);
+}
+
+/*
+ * Send an HTTP GET request and wait for a response
+ *
+ * httpclient:get(url, headers, payload)
+ */
+__LJMP static int hlua_httpclient_get(lua_State *L)
+{
+	return hlua_httpclient_send(L, HTTP_METH_GET);
+
+}
+
+/*
+ * Sends an HTTP PUT request and wait for a response
+ *
+ * httpclient:put(url, headers, payload)
+ */
+__LJMP static int hlua_httpclient_put(lua_State *L)
+{
+	return hlua_httpclient_send(L, HTTP_METH_PUT);
+}
+
+/*
+ * Send an HTTP POST request and wait for a response
+ *
+ * httpclient:post(url, headers, payload)
+ */
+__LJMP static int hlua_httpclient_post(lua_State *L)
+{
+	return hlua_httpclient_send(L, HTTP_METH_POST);
+}
+
+
+/*
+ * Sends an HTTP DELETE request and wait for a response
+ *
+ * httpclient:delete(url, headers, payload)
+ */
+__LJMP static int hlua_httpclient_delete(lua_State *L)
+{
+	return hlua_httpclient_send(L, HTTP_METH_DELETE);
+}
+
+/*
  *
  *
  * Class TXN
@@ -11918,6 +11968,10 @@
 	lua_pushstring(L, "__index");
 	lua_newtable(L);
 	hlua_class_function(L, "get",         hlua_httpclient_get);
+	hlua_class_function(L, "head",        hlua_httpclient_head);
+	hlua_class_function(L, "put",         hlua_httpclient_put);
+	hlua_class_function(L, "post",        hlua_httpclient_post);
+	hlua_class_function(L, "delete",      hlua_httpclient_delete);
 	lua_settable(L, -3); /* Sets the __index entry. */
 	/* Register the garbage collector entry. */
 	lua_pushstring(L, "__gc");
