nostr_core_lib/EXPORT_GUIDE.md

2.5 KiB

c-nostr Export and Implementation Guide

Overview

This guide provides essential information for developers using the c-nostr library, particularly regarding the capabilities and limitations of its self-contained modules, such as the HTTP client.

HTTP Client (http_client.c)

The http_client module is a lightweight, self-contained HTTP/HTTPS client designed for simple and direct web requests. It is ideal for tasks like fetching NIP-11 information from Nostr relays or interacting with standard, permissive web APIs.

Key Features

  • Self-Contained: It is built with mbedTLS and has no external dependencies beyond standard C libraries, making it highly portable.
  • Simplicity: It provides a straightforward http_get() function for making web requests.
  • TLS Support: It supports HTTPS and basic TLS 1.3/1.2 features, including SNI (Server Name Indication) and ALPN (Application-Layer Protocol Negotiation).

Limitations

The http_client is intentionally simple and is not a full-featured web browser. Due to its minimalist design, it will likely be blocked by websites that employ advanced anti-bot protection systems.

  • Incompatibility with Advanced Bot Protection: Sites like Google, Cloudflare, and others use sophisticated fingerprinting techniques to distinguish between real browsers and automated clients. They analyze the exact combination of TLS cipher suites, TLS extensions, and HTTP headers. Our client's fingerprint does not match a standard browser, so these sites will preemptively drop the connection, typically resulting in a HTTP_ERROR_NETWORK error.

  • Intended Use Case: This client is best suited for interacting with known, friendly APIs and Nostr relays. It is not designed for general web scraping or for accessing services that are heavily guarded against automated traffic.

Best Practices

  • Use for APIs and Relays: Rely on this client for fetching data from well-defined, public endpoints that do not have aggressive bot-detection measures in place.
  • Avoid Protected Sites: Do not attempt to use this client to access services like Google Search, as such attempts will fail. For those use cases, a full-featured library like libcurl or a dedicated web-scraping framework is required.
  • Check the Test Suite: The tests/http_client_test.c file contains test cases that demonstrate both the successful use cases (e.g., httpbin.org) and the expected failures (e.g., google.com), providing a clear reference for the client's capabilities.