Mercurial
view seobeo/seobeo_http_client_test.c @ 119:c39582f937e5
[Seobeo Client] Added client side logic which will be used for all my other calls instead of curl.
| author | June Park <parkjune1995@gmail.com> |
|---|---|
| date | Wed, 07 Jan 2026 16:05:57 -0800 |
| parents | 6626ec933933 |
| children |
line wrap: on
line source
#include "seobeo/seobeo.h" #include <stdio.h> #include <stdlib.h> #include <string.h> #include <assert.h> // Test basic HTTP client functionality void test_http_client_without_ssl() { printf("Testing HTTP client (non-SSL)...\n"); // Create a client handle without TLS Seobeo_Handle *h = Seobeo_Stream_Handle_Client_Create("example.com", "80", FALSE); if (!h || h->socket < 0) { printf(" ✗ Failed to create client handle\n"); if (h) Seobeo_Handle_Destroy(h); return; } printf(" ✓ Client handle created successfully\n"); // Generate and send HTTP request char request[4096]; int request_len = sprintf( request, "GET / HTTP/1.1\r\n" "Host: example.com\r\n" "Connection: close\r\n" "\r\n" ); Seobeo_Handle_Queue(h, (uint8*)request, (uint32)request_len); int flush_result = Seobeo_Handle_Flush(h); if (flush_result < 0) { printf(" ✗ Failed to send request\n"); Seobeo_Handle_Destroy(h); return; } printf(" ✓ Request sent successfully\n"); // Read response int bytes_read = 0; int total_bytes = 0; int attempts = 0; const int max_attempts = 100; while (attempts++ < max_attempts) { bytes_read = Seobeo_Handle_Read(h); if (bytes_read > 0) { total_bytes += bytes_read; } else if (bytes_read == -2) { // Connection closed break; } else if (bytes_read == 0) { // Would block, wait a bit usleep(10000); // 10ms continue; } else { printf(" ✗ Error reading response\n"); Seobeo_Handle_Destroy(h); return; } } if (total_bytes > 0) { printf(" ✓ Received response (%d bytes)\n", total_bytes); // Check if we got HTTP response if (h->read_buffer_len > 0 && strstr((char*)h->read_buffer, "HTTP/1.1") != NULL) { printf(" ✓ Valid HTTP response received\n"); } else { printf(" ✗ Invalid HTTP response\n"); } } else { printf(" ⚠ No response received (this may be a network issue)\n"); } Seobeo_Handle_Destroy(h); printf(" ✓ Client handle destroyed\n"); } void test_http_client_with_ssl() { printf("\nTesting HTTP client (with SSL)...\n"); #ifdef SEOBEO_NO_SSL printf(" ⚠ SSL not compiled in, skipping SSL test\n"); return; #else // Create a client handle with TLS Seobeo_Handle *h = Seobeo_Stream_Handle_Client_Create("example.com", "443", TRUE); if (!h || h->socket < 0) { printf(" ✗ Failed to create SSL client handle\n"); if (h) Seobeo_Handle_Destroy(h); return; } printf(" ✓ SSL client handle created successfully\n"); printf(" ✓ SSL handshake completed\n"); // Generate and send HTTPS request char request[4096]; int request_len = sprintf( request, "GET / HTTP/1.1\r\n" "Host: example.com\r\n" "Connection: close\r\n" "\r\n" ); Seobeo_Handle_Queue(h, (uint8*)request, (uint32)request_len); int flush_result = Seobeo_Handle_Flush(h); if (flush_result < 0) { printf(" ✗ Failed to send SSL request\n"); Seobeo_Handle_Destroy(h); return; } printf(" ✓ SSL request sent successfully\n"); // Read response int bytes_read = 0; int total_bytes = 0; int attempts = 0; const int max_attempts = 100; while (attempts++ < max_attempts) { bytes_read = Seobeo_Handle_Read(h); if (bytes_read > 0) { total_bytes += bytes_read; } else if (bytes_read == -2) { // Connection closed break; } else if (bytes_read == 0) { // Would block, wait a bit usleep(10000); // 10ms continue; } else { printf(" ✗ Error reading SSL response\n"); Seobeo_Handle_Destroy(h); return; } } if (total_bytes > 0) { printf(" ✓ Received SSL response (%d bytes)\n", total_bytes); // Check if we got HTTP response if (h->read_buffer_len > 0 && strstr((char*)h->read_buffer, "HTTP/1.1") != NULL) { printf(" ✓ Valid HTTPS response received\n"); } else { printf(" ✗ Invalid HTTPS response\n"); } } else { printf(" ⚠ No SSL response received (this may be a network issue)\n"); } Seobeo_Handle_Destroy(h); printf(" ✓ SSL client handle destroyed\n"); #endif } int main() { printf("=== Seobeo HTTP Client Tests ===\n\n"); test_http_client_without_ssl(); test_http_client_with_ssl(); printf("\n=== Tests Complete ===\n"); return 0; }