Browse Source

Fixed many redirects problem on Proxy

yhirose 5 years ago
parent
commit
f5598237b2
2 changed files with 12 additions and 10 deletions
  1. 2 2
      httplib.h
  2. 10 8
      test/test_proxy.cc

+ 2 - 2
httplib.h

@@ -333,7 +333,7 @@ struct Request {
   MultipartFormData get_file_value(const char *key) const;
 
   // private members...
-  size_t authorization_count_ = 1;
+  size_t authorization_count_ = 0;
 };
 
 struct Response {
@@ -3995,7 +3995,7 @@ inline bool Client::handle_request(Stream &strm, const Request &req,
 
 #ifdef CPPHTTPLIB_OPENSSL_SUPPORT
   if ((res.status == 401 || res.status == 407) &&
-      req.authorization_count_ == 1) {
+      req.authorization_count_ < 5) {
     auto is_proxy = res.status == 407;
     const auto &username =
         is_proxy ? proxy_digest_auth_username_ : digest_auth_username_;

+ 10 - 8
test/test_proxy.cc

@@ -185,15 +185,17 @@ void DigestAuthTestFromHTTPWatch(Client& cli) {
     for (auto path : paths) {
       auto res = cli.Get(path.c_str());
       ASSERT_TRUE(res != nullptr);
-      EXPECT_EQ(400, res->status);
+      EXPECT_EQ(401, res->status);
     }
 
-    cli.set_digest_auth("bad", "world");
-    for (auto path : paths) {
-      auto res = cli.Get(path.c_str());
-      ASSERT_TRUE(res != nullptr);
-      EXPECT_EQ(400, res->status);
-    }
+    // NOTE: Until httpbin.org fixes issue #46, the following test is commented
+    // out. Plese see https://httpbin.org/digest-auth/auth/hello/world
+    // cli.set_digest_auth("bad", "world");
+    // for (auto path : paths) {
+    //   auto res = cli.Get(path.c_str());
+    //   ASSERT_TRUE(res != nullptr);
+    //   EXPECT_EQ(401, res->status);
+    // }
   }
 }
 
@@ -266,7 +268,7 @@ void KeepAliveTest(Client& cli, bool basic) {
 
 
   {
-    int count = paths.size();
+    int count = static_cast<int>(paths.size());
     while (count--) {
       auto &res = responses[i++];
       EXPECT_EQ("{\n  \"authenticated\": true, \n  \"user\": \"hello\"\n}\n", res.body);