diff --git a/lib/codegen/codegen.dart b/lib/codegen/codegen.dart
index eb5bb0ef..a004c2dc 100644
--- a/lib/codegen/codegen.dart
+++ b/lib/codegen/codegen.dart
@@ -1,4 +1,5 @@
 import 'package:apidash/codegen/kotlin/pkg_okhttp.dart';
+import 'python/pkg_http_client.dart';
 import 'package:apidash/consts.dart';
 
 import 'package:apidash/models/models.dart' show RequestModel;
@@ -15,6 +16,8 @@ class Codegen {
         return DartHttpCodeGen().getCode(requestModel, defaultUriScheme);
       case CodegenLanguage.kotlinOkHttp:
         return KotlinOkHttpCodeGen().getCode(requestModel);
+      case CodegenLanguage.pythonHttpClient:
+        return PythonHttpClient().getCode(requestModel);
       default:
         throw ArgumentError('Invalid codegenLanguage');
     }
diff --git a/lib/codegen/python/pkg_http_client.dart b/lib/codegen/python/pkg_http_client.dart
new file mode 100644
index 00000000..1be3f34d
--- /dev/null
+++ b/lib/codegen/python/pkg_http_client.dart
@@ -0,0 +1,82 @@
+import 'package:apidash/consts.dart';
+
+import '../../models/request_model.dart';
+
+class PythonHttpClient {
+  final String headerSnippet = """
+import http.client
+import json
+
+""";
+
+  final String footerSnippet = """
+res = conn.getresponse()
+data = res.read()
+print(data.decode("utf-8"))
+""";
+
+  String getCode(RequestModel requestModel) {
+    String result = "";
+    result += headerSnippet;
+    result +=
+        "conn = http.client.HTTPSConnection('${getUrl(requestModel)["host"]}'${getUrl(requestModel)["port"]})\n";
+    result += "payload = json.dumps(${requestModel.requestBody ?? ""})\n";
+    result +=
+        """headers = {\n'Content-Type':'${requestModel.requestBodyContentType == ContentType.json ? 'application/json' : 'text/plain'}'\n${addHeaders(requestModel)}},\n""";
+    result +=
+        "conn.request(\"${requestModel.method.name.toUpperCase()}\", \"${getUrl(requestModel)["endpoint"]}${addQueryParams(requestModel)}\", payload, headers)\n";
+    result += footerSnippet;
+
+    return result;
+  }
+
+  String addHeaders(RequestModel requestModel) {
+    String result = "";
+    if (requestModel.requestHeaders == null) {
+      return result;
+    }
+    for (final header in requestModel.requestHeaders!) {
+      result += """'${header.k}':'${header.v}',\n""";
+    }
+    return result;
+  }
+
+  String addQueryParams(RequestModel requestModel) {
+    String result = "";
+    if (requestModel.requestParams == null) {
+      return result;
+    }
+    result += "?";
+    for (final queryParam in requestModel.requestParams!) {
+      result +=
+          "${queryParam.k.toString().replaceAll(" ", "%20")}=${queryParam.v.toString().replaceAll(" ", "%20")}&";
+    }
+    return result.substring(0, result.length - 1);
+  }
+
+  Map<String, String> getUrl(RequestModel requestModel) {
+    String result = "";
+    if (requestModel.url.startsWith('http://') ||
+        requestModel.url.startsWith('https://')) {
+      result = requestModel.url.substring(requestModel.url.indexOf('://') + 3);
+    }else{
+      result = requestModel.url;
+    }
+    Map<String, String> resultMap = {};
+    if (result.contains(":")) {
+      resultMap["host"] = result.substring(0, result.indexOf(':'));
+      resultMap["port"] =
+          ",${result.substring(result.indexOf(':') + 1, result.contains('/') ? result.indexOf('/') : result.length)}";
+      resultMap["endpoint"] =
+          "/${result.substring(result.contains('/') ? result.indexOf('/') + 1 : result.length)}";
+    } else {
+      resultMap["host"] = result.contains("/")
+          ? result.substring(0, result.indexOf('/'))
+          : result;
+      resultMap["port"] = "";
+      resultMap["endpoint"] =
+          "/${result.substring(result.contains('/') ? result.indexOf('/') + 1 : result.length)}";
+    }
+    return resultMap;
+  }
+}
diff --git a/lib/consts.dart b/lib/consts.dart
index f1390a3c..40193bfe 100644
--- a/lib/consts.dart
+++ b/lib/consts.dart
@@ -230,7 +230,8 @@ const kDefaultContentType = ContentType.json;
 
 enum CodegenLanguage {
   dartHttp("Dart (http)"),
-  kotlinOkHttp("Kotlin (OkHttp)");
+  kotlinOkHttp("Kotlin (OkHttp)"),
+  pythonHttpClient("Python (http.client)");
 
   const CodegenLanguage(this.label);
   final String label;
diff --git a/test/widget_test.dart b/test/widget_test.dart
new file mode 100644
index 00000000..c0e5cab0
--- /dev/null
+++ b/test/widget_test.dart
@@ -0,0 +1,31 @@
+// This is a basic Flutter widget test.
+//
+// To perform an interaction with a widget in your test, use the WidgetTester
+// utility in the flutter_test package. For example, you can send tap and scroll
+// gestures. You can also use WidgetTester to find child widgets in the widget
+// tree, read text, and verify that the values of widget properties are correct.
+
+import 'package:apidash/app.dart';
+import 'package:flutter/material.dart';
+import 'package:flutter_test/flutter_test.dart';
+
+import 'package:apidash/main.dart';
+
+void main() {
+  testWidgets('Counter increments smoke test', (WidgetTester tester) async {
+    // Build our app and trigger a frame.
+    await tester.pumpWidget(const DashApp());
+
+    // Verify that our counter starts at 0.
+    expect(find.text('0'), findsOneWidget);
+    expect(find.text('1'), findsNothing);
+
+    // Tap the '+' icon and trigger a frame.
+    await tester.tap(find.byIcon(Icons.add));
+    await tester.pump();
+
+    // Verify that our counter has incremented.
+    expect(find.text('0'), findsNothing);
+    expect(find.text('1'), findsOneWidget);
+  });
+}