PHP code example of masakielastic / llhttp

1. Go to this page and download the library: Download masakielastic/llhttp library. Choose the download type require.

2. Extract the ZIP file and open the index.php.

3. Add this code to the index.php.
    
        
<?php
require_once('vendor/autoload.php');

/* Start to develop here. Best regards https://php-download.com/ */

    

masakielastic / llhttp example snippets




use Llhttp\Parser;

// Create a request parser
$parser = new Parser(Parser::TYPE_REQUEST);

$request = "GET /api/users?page=1 HTTP/1.1\r\n" .
           "Host: example.com\r\n" .
           "Content-Type: application/json\r\n" .
           "Authorization: Bearer token123\r\n" .
           "\r\n" .
           '{"data": "request body"}';

// Parse the request
$parser->parse($request);
$parser->parseComplete();

// Get parsed information
echo "Method: " . $parser->getMethodName() . "\n";
echo "URL: " . $parser->getUrl() . "\n";
echo "HTTP Version: " . $parser->getHttpMajor() . "." . $parser->getHttpMinor() . "\n";
echo "Body: " . $parser->getBody() . "\n";

// Get specific header
$host = $parser->getHeader('Host');
echo "Host: $host\n";

// Get all headers
$headers = $parser->getHeaders();
foreach ($headers as $name => $value) {
    echo "Header: $name = $value\n";
}



use Llhttp\Parser;

// Create a response parser
$parser = new Parser(Parser::TYPE_RESPONSE);

$response = "HTTP/1.1 200 OK\r\n" .
            "Content-Type: application/json\r\n" .
            "Content-Length: 27\r\n" .
            "Server: nginx/1.20.1\r\n" .
            "\r\n" .
            '{"message": "Hello, World!"}';

// Parse the response
$parser->parse($response);
$parser->parseComplete();

// Get response information
echo "Status Code: " . $parser->getStatusCode() . "\n";
echo "HTTP Version: " . $parser->getHttpMajor() . "." . $parser->getHttpMinor() . "\n";
echo "Server: " . $parser->getHeader('Server') . "\n";
echo "Content-Type: " . $parser->getHeader('Content-Type') . "\n";
echo "Body: " . $parser->getBody() . "\n";
echo "Keep-Alive: " . ($parser->shouldKeepAlive() ? 'Yes' : 'No') . "\n";



use Llhttp\Parser;

$parser = new Parser(Parser::TYPE_REQUEST);

// Parse data in chunks
$chunks = [
    "GET /path HTTP/1.1\r\n",
    "Host: example.com\r\n",
    "Content-Length: 13\r\n",
    "\r\n",
    '{"test": true}'
];

foreach ($chunks as $chunk) {
    $parser->parse($chunk);
    
    // Check if parsing is complete
    if ($parser->isComplete()) {
        break;
    }
}

echo "URL: " . $parser->getUrl() . "\n";
echo "Body: " . $parser->getBody() . "\n";



use Llhttp\Parser;

// Create flexible parser that auto-detects request/response
$parser = new Parser(Parser::TYPE_BOTH);

// Can parse HTTP requests
$request = "GET /api HTTP/1.1\r\nHost: example.com\r\n\r\n";
$parser->parse($request);
$parser->parseComplete();
echo "Parsed as request: " . $parser->getMethodName() . "\n";

// Create new instance for response (recommended for TYPE_BOTH)
$responseParser = new Parser(Parser::TYPE_BOTH);
$response = "HTTP/1.1 200 OK\r\nContent-Type: text/plain\r\n\r\nHello";
$responseParser->parse($response);
$responseParser->parseComplete();
echo "Parsed as response: " . $responseParser->getStatusCode() . "\n";



use Llhttp\Parser;

$parser = new Parser(Parser::TYPE_REQUEST);

// Parse some data
$parser->parse("GET /test HTTP/1.1\r\nHost: example.com\r\n\r\n");

// Check parser state
echo "State: " . $parser->getState() . "\n";
echo "Complete: " . ($parser->isComplete() ? 'Yes' : 'No') . "\n";

// Reset parser for reuse
$parser->reset();
echo "State after reset: " . $parser->getState() . "\n";

// Parse new data
$parser->parse("POST /api HTTP/1.1\r\n\r\n");
echo "New method: " . $parser->getMethodName() . "\n";



use Llhttp\Parser;
use Llhttp\ParseException;

$parser = new Parser(Parser::TYPE_REQUEST);

try {
    $parser->parse("INVALID HTTP DATA");
} catch (ParseException $e) {
    echo "Parse error: " . $e->getMessage() . "\n";
    echo "Error code: " . $e->getErrorCode() . "\n";
}
bash
# Clone the repository
git clone https://github.com/yourusername/php-ext-llhttp.git
cd php-ext-llhttp

# Build the extension
phpize
./configure
make

# Install (
bash
# Test new API
php test_new_api.php

# Test basic functionality
php test_basic.php

# Test header collection
php test_getheaders.php

# Test response parsing
php test_simple_response.php