diff --git a/Makefile b/Makefile
index 13170c7227aadda94e44a7840180e528b5295747..a45eee96ce258ce27cfa74f7c7d6843c9497c4da 100644
--- a/Makefile
+++ b/Makefile
@@ -1328,6 +1328,8 @@ test_c: buildtests_c
 	$(Q) $(BINDIR)/$(CONFIG)/httpcli_format_request_test || ( echo test httpcli_format_request_test failed ; exit 1 )
 	$(E) "[RUN]     Testing httpcli_parser_test"
 	$(Q) $(BINDIR)/$(CONFIG)/httpcli_parser_test || ( echo test httpcli_parser_test failed ; exit 1 )
+	$(E) "[RUN]     Testing httpcli_test"
+	$(Q) $(BINDIR)/$(CONFIG)/httpcli_test || ( echo test httpcli_test failed ; exit 1 )
 	$(E) "[RUN]     Testing json_rewrite_test"
 	$(Q) $(BINDIR)/$(CONFIG)/json_rewrite_test || ( echo test json_rewrite_test failed ; exit 1 )
 	$(E) "[RUN]     Testing json_test"
diff --git a/build.json b/build.json
index 084645937b710155a74aaace8539dd41d5a2585e..d7050d56235668e096625a769691df9c250cd450 100644
--- a/build.json
+++ b/build.json
@@ -1351,7 +1351,6 @@
     {
       "name": "httpcli_test",
       "build": "test",
-      "run": false,
       "language": "c",
       "src": [
         "test/core/httpcli/httpcli_test.c"
diff --git a/test/core/httpcli/httpcli_test.c b/test/core/httpcli/httpcli_test.c
index fb2dbc00ce8db2d189c475a71ae7a7b441969099..76820916a184110a985a1ab10a1a352ac7566e19 100644
--- a/test/core/httpcli/httpcli_test.c
+++ b/test/core/httpcli/httpcli_test.c
@@ -36,8 +36,12 @@
 #include <string.h>
 
 #include "src/core/iomgr/iomgr.h"
+#include <grpc/support/alloc.h>
 #include <grpc/support/log.h>
+#include <grpc/support/string_util.h>
+#include <grpc/support/subprocess.h>
 #include <grpc/support/sync.h>
+#include "test/core/util/port.h"
 #include "test/core/util/test_config.h"
 
 static gpr_event g_done;
@@ -47,56 +51,93 @@ static gpr_timespec n_seconds_time(int seconds) {
 }
 
 static void on_finish(void *arg, const grpc_httpcli_response *response) {
+  const char *expect = 
+      "<html><head><title>Hello world!</title></head>"
+      "<body><p>This is a test</p></body></html>";
   GPR_ASSERT(arg == (void *)42);
   GPR_ASSERT(response);
   GPR_ASSERT(response->status == 200);
+  GPR_ASSERT(response->body_length == strlen(expect));
+  GPR_ASSERT(0 == memcmp(expect, response->body, response->body_length));
   gpr_event_set(&g_done, (void *)1);
 }
 
-static void test_get(int use_ssl) {
+static void test_get(int use_ssl, int port) {
   grpc_httpcli_request req;
+  char* host;
 
   gpr_log(GPR_INFO, "running %s with use_ssl=%d.", "test_get", use_ssl);
 
+  gpr_asprintf(&host, "localhost:%d", port);
+  gpr_log(GPR_INFO, "requesting from %s", host);
+
   gpr_event_init(&g_done);
   memset(&req, 0, sizeof(req));
-  req.host = "www.google.com";
-  req.path = "/";
+  req.host = host;
+  req.path = "/get";
   req.use_ssl = use_ssl;
 
   grpc_httpcli_get(&req, n_seconds_time(15), on_finish, (void *)42);
+  gpr_free(host);
   GPR_ASSERT(gpr_event_wait(&g_done, n_seconds_time(20)));
 }
 
-/*
-static void test_post(int use_ssl) {
+static void test_post(int use_ssl, int port) {
   grpc_httpcli_request req;
+  char* host;
 
   gpr_log(GPR_INFO, "running %s with use_ssl=%d.", "test_post", (int)use_ssl);
 
+  gpr_asprintf(&host, "localhost:%d", port);
+  gpr_log(GPR_INFO, "posting to %s", host);
+
   gpr_event_init(&g_done);
   memset(&req, 0, sizeof(req));
-  req.host = "requestb.in";
-  req.path = "/1eamwr21";
+  req.host = host;
+  req.path = "/post";
   req.use_ssl = use_ssl;
 
-  grpc_httpcli_post(&req, NULL, 0, n_seconds_time(15), on_finish,
+  grpc_httpcli_post(&req, "hello", 5, n_seconds_time(15), on_finish,
                     (void *)42);
   GPR_ASSERT(gpr_event_wait(&g_done, n_seconds_time(20)));
 }
-*/
 
 int main(int argc, char **argv) {
+  gpr_subprocess* server;
+  char *me = argv[0];
+  char *lslash = strrchr(me, '/');
+  char* args[4];
+  char root[1024];
+  int port = grpc_pick_unused_port_or_die();
+
+  /* figure out where we are */
+  if (lslash) {
+    memcpy(root, me, lslash - me);
+    root[lslash - me] = 0;
+  } else {
+    strcpy(root, ".");
+  }
+
+  /* start the server */
+  gpr_asprintf(&args[0], "%s/../../test/core/httpcli/test_server.py", root);
+  args[1] = "--port";
+  gpr_asprintf(&args[2], "%d", port);
+  server = gpr_subprocess_create(3, (const char**)args);
+  GPR_ASSERT(server);
+  gpr_free(args[0]);
+  gpr_free(args[2]);
+
+  gpr_sleep_until(gpr_time_add(gpr_now(), gpr_time_from_seconds(5)));
+
   grpc_test_init(argc, argv);
   grpc_iomgr_init();
 
-  test_get(0);
-  test_get(1);
-
-  /* test_post(0); */
-  /* test_post(1); */
+  test_get(0, port);
+  test_post(0, port);
 
   grpc_iomgr_shutdown();
 
+  gpr_subprocess_destroy(server);
+
   return 0;
 }
diff --git a/test/core/httpcli/test_server.py b/test/core/httpcli/test_server.py
new file mode 100755
index 0000000000000000000000000000000000000000..babfe84ddcaaa777fe71b5031005e0677ae210c8
--- /dev/null
+++ b/test/core/httpcli/test_server.py
@@ -0,0 +1,31 @@
+#!/usr/bin/env python
+
+"""Server for httpcli_test"""
+
+import argparse
+import BaseHTTPServer
+
+argp = argparse.ArgumentParser(description='Server for httpcli_test')
+argp.add_argument('-p', '--port', default=10080, type=int)
+args = argp.parse_args()
+
+print 'server running on port %d' % args.port
+
+class Handler(BaseHTTPServer.BaseHTTPRequestHandler):
+	def good(self):
+		self.send_response(200)
+		self.send_header('Content-Type', 'text/html')
+		self.end_headers()
+		self.wfile.write('<html><head><title>Hello world!</title></head>')
+		self.wfile.write('<body><p>This is a test</p></body></html>')
+
+	def do_GET(self):
+		if self.path == '/get':
+			self.good()
+
+	def do_POST(self):
+		content = self.rfile.read(int(self.headers.getheader('content-length')))
+		if self.path == '/post' and content == 'hello':
+			self.good()
+
+BaseHTTPServer.HTTPServer(('', args.port), Handler).serve_forever()
diff --git a/tools/run_tests/tests.json b/tools/run_tests/tests.json
index 4aafdea46fda612e9eda590415422126c02baf6a..7a38e03f81f96fd5dfd9d0e0e8cc9ea01d21e1db 100644
--- a/tools/run_tests/tests.json
+++ b/tools/run_tests/tests.json
@@ -348,6 +348,15 @@
       "posix"
     ]
   }, 
+  {
+    "flaky": false, 
+    "language": "c", 
+    "name": "httpcli_test", 
+    "platforms": [
+      "windows", 
+      "posix"
+    ]
+  }, 
   {
     "flaky": false, 
     "language": "c",