# gemini-php PHP 8 Library for [Gemini Protocol](https://geminiprotocol.net) ## Extras * [gemtext-php](https://github.com/YGGverse/gemtext-php) - Object-oriented PHP 8 library for Gemini / Gemtext operations ## Usage ``` composer require yggverse/gemini ``` ## Client PHP interface for Gemini protocol queries by TLS socket connection ### Request ``` php $request = new \Yggverse\Gemini\Client\Request( 'gemini://yggverse.cities.yesterweb.org:1965/index.gmi' ); ``` **Resolved request (SNI)** For direct connection provide resolved IP as the second argument ``` php $request = new \Yggverse\Gemini\Client\Request( 'gemini://yggverse.cities.yesterweb.org:1965/index.gmi' // target URL '68.133.1.71' // resolved IP, skip to use system-wide resolver ); ``` Alternatively, use `setResolvedHost` method of `Request` object before `getResponse` #### Request::setResolvedHost ``` php $request->setResolvedHost( '68.133.1.71' ) ``` * to resolve network address with PHP, take a look on the [net-php](https://github.com/YGGverse/net-php) library! #### Request::getResolvedHost Get resolved host back #### Request::setHost #### Request::getHost #### Request::setPort #### Request::getPort #### Request::setPath #### Request::getPath #### Request::setQuery #### Request::getQuery #### Request::getResponse Execute requested URL and return raw response ``` php var_dump( $request->getResponse() ); ``` #### Request::getOptions #### Request::setOptions ``` php $request = new \Yggverse\Gemini\Client\Request( 'gemini://yggverse.cities.yesterweb.org', '68.133.1.71' // make direct request to the resolved host ); $request->setOptions( [ 'ssl' => [ 'peer_name' => 'yggverse.cities.yesterweb.org', // SNI 'verify_peer' => false, 'verify_peer_name' => false ] ] ); ``` ### Response This class provides additional features for the raw response operations ``` php $response = new \Yggverse\Gemini\Client\Response( $request->getResponse() ); ``` #### Response::setCode #### Response::getCode #### Response::setMeta #### Response::getMeta #### Response::setBody #### Response::getBody ``` php var_dump( $response->getBody() ); ``` ## Integrations * [gemini-dl](https://github.com/YGGverse/gemini-dl) - CLI Batch downloader for Gemini Protocol * [Yo!](https://github.com/YGGverse/Yo/tree/gemini) - Crawler for different networks * [Yoda](https://github.com/YGGverse/Yoda) - PHP-GTK browser for Gemini Protocol * [β-Doku](https://github.com/YGGverse/bdoku) - DokuWiki Satellite for Gemini Protocol