{"id":15016408,"url":"https://github.com/david-dick/net-icap-client","last_synced_at":"2026-04-07T14:01:31.359Z","repository":{"id":190254164,"uuid":"680352631","full_name":"david-dick/net-icap-client","owner":"david-dick","description":"A client implementation of the ICAP (RFC 3507) protocol","archived":false,"fork":false,"pushed_at":"2023-08-23T20:37:09.000Z","size":29,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-01-19T17:11:17.421Z","etag":null,"topics":["icap-client","icap-library","perl","perl-module","perl5","perl5-module"],"latest_commit_sha":null,"homepage":"https://metacpan.org/dist/Net-ICAP-Client","language":"Perl","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/david-dick.png","metadata":{"files":{"readme":"README","changelog":"Changes","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2023-08-19T01:24:39.000Z","updated_at":"2023-10-22T06:28:38.000Z","dependencies_parsed_at":null,"dependency_job_id":"9ceed552-f213-4676-8231-b5ea5b0f8438","html_url":"https://github.com/david-dick/net-icap-client","commit_stats":{"total_commits":3,"total_committers":1,"mean_commits":3.0,"dds":0.0,"last_synced_commit":"587ecf256f64a0134d56afbd4561faea89b4bc59"},"previous_names":["david-dick/net-icap-client"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/david-dick%2Fnet-icap-client","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/david-dick%2Fnet-icap-client/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/david-dick%2Fnet-icap-client/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/david-dick%2Fnet-icap-client/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/david-dick","download_url":"https://codeload.github.com/david-dick/net-icap-client/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":243313664,"owners_count":20271223,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["icap-client","icap-library","perl","perl-module","perl5","perl5-module"],"created_at":"2024-09-24T19:48:50.309Z","updated_at":"2025-12-26T15:26:37.874Z","avatar_url":"https://github.com/david-dick.png","language":"Perl","funding_links":[],"categories":[],"sub_categories":[],"readme":"NAME\n\n    Net::ICAP::Client - A client implementation of the ICAP (RFC 3507)\n    protocol\n\nVERSION\n\n    Version 0.08\n\nSYNOPSIS\n\n        use Net::ICAP::Client;\n    \n        my $icap = Net::ICAP::Client-\u003enew('icap://icap-proxy.example.com/');\n        my $request = HTTP::Request-\u003enew( 'POST' =\u003e 'https://www.example.com/path' );\n        my ( $headers, $body ) = $icap-\u003erequest( $request );\n        if ($headers-\u003eisa('HTTP::Request') {\n            # forward request to intended destination\n        } elsif ($headers-\u003eisa('HTTP::Response') {\n            # return response to original requestor\n        }\n\nDESCRIPTION\n\n    This module provides a client interface to an ICAP (RFC 3507) Server\n    \u003chttp://tools.ietf.org/html/rfc3507\u003e. ICAP Servers are designed to\n    inspect and modify HTTP Request and Responses before the Request is\n    passed to backend systems or the Response goes back to the user.\n\nSUBROUTINES/METHODS\n\n new\n\n        my $icap = Net::ICAP::Client-\u003enew('icap://icap-proxy.example.com/');\n        my $icap = Net::ICAP::Client-\u003enew('icaps://icap-proxy.example.com/', SSL_ca_path =\u003e '/path/to/ca-bundle.crt', %other_IO_SSL_Socket_options);\n\n    By default, the SSL_verifycn_scheme, SSL_verifycn_name and\n    SSL_verify_mode parameters are automatically set for icaps URIs, but\n    these parameters may be overridden.\n\n debug\n\n    $icap-\u003edebug() accepts an optional debug value and returns the current\n    debug value\n\n allow_204\n\n    $icap-\u003eallow_204() accepts an optional value to set whether the client\n    will send an Allow: 204\n    \u003chttps://tools.ietf.org/html/rfc3507#section-4.6\u003e and returns the\n    current setting\n\n allow_preview\n\n    $icap-\u003eallow_preview() accepts an optional value to set whether the\n    client will send an Preview\n    \u003chttps://tools.ietf.org/html/rfc3507#section-4.5\u003e and returns the\n    current setting\n\n agent\n\n    $icap-\u003eagent() accepts an optional User Agent string and returns the\n    current User Agent string\n\n server_allows_204\n\n    $icap-\u003eserver_allows_204() returns true if the remote ICAP server can\n    return a 204 (No modification needed) response. This method will issue\n    an OPTIONS call to the remote server unless another OPTIONS call has\n    been sent in the last ttl seconds.\n\n is_tag\n\n    $icap-\u003eis_tag() returns the value of the remote ICAP server's ISTag\n    \u003chttps://tools.ietf.org/html/rfc3507#section-4.7\u003e header. This method\n    will issue an OPTIONS call to the remote server unless another OPTIONS\n    call has been sent in the last ttl seconds.\n\n service\n\n    $icap-\u003eservice() returns the value of the remote ICAP server's Service\n    \u003chttps://tools.ietf.org/html/rfc3507#section-4.10.2\u003e header. This\n    method will issue an OPTIONS call to the remote server unless another\n    OPTIONS call has been sent in the last ttl seconds.\n\n ttl\n\n    $icap-\u003ettl() returns the value of the remote ICAP server's Options-TTL\n    \u003chttps://tools.ietf.org/html/rfc3507#section-4.10.2\u003e header. This\n    method will issue an OPTIONS call to the remote server unless another\n    OPTIONS call has been sent in the last ttl seconds.\n\n max_connections\n\n    $icap-\u003emax_connections() returns the value of the remote ICAP server's\n    Max-Connections \u003chttps://tools.ietf.org/html/rfc3507#section-4.10.2\u003e\n    header. This method will issue an OPTIONS call to the remote server\n    unless another OPTIONS call has been sent in the last ttl seconds.\n\n preview_size\n\n    $icap-\u003epreview_size() returns the value of the remote ICAP server's\n    Preview \u003chttps://tools.ietf.org/html/rfc3507#section-4.10.2\u003e header.\n    This method will issue an OPTIONS call to the remote server unless\n    another OPTIONS call has been sent in the last ttl seconds.\n\n uri\n\n    $icap-\u003euri() returns the current URI of the remote ICAP server as a URI\n    object.\n\n request\n\n        my $icap = Net::ICAP::Client-\u003enew('icap://icap-proxy.example.com/');\n        my $request_headers = HTTP::Headers-\u003enew();\n        my $request = HTTP::Request-\u003enew( 'POST' =\u003e \"https://www.example.com/path?name=value\", $request_headers, \"name2=value2\" );\n        my ( $request_or_response_headers, $filehandle_containing_possibly_updated_body ) = $icap-\u003erequest( $request, $filehandle_containing_request_body );\n\n    $icap-\u003erequest() expects an HTTP::Request object and an optional\n    filehandle. It will return an HTTP::Request or an HTTP::Response object\n    containing the request or response without the body and a filehandle\n    containing the body.\n\n response\n\n        my $icap = Net::ICAP::Client-\u003enew('icap://icap-proxy.example.com/');\n        my $response = HTTP::Response-\u003enew( '200', 'OK' );\n        my ( $response_headers, $filehandle_containing_possibly_updated_body ) = $icap-\u003eresponse( $optional_request_or_undef, $response, $filehandle_containing_response_body );\n\n    $icap-\u003eresponse() expects an HTTP::Request object (if available), an\n    HTTP::Response object and an optional filehandle. It will return an\n    HTTP::Response object containing the response without the response body\n    and a filehandle containing the response body.\n\nAUTHOR\n\n    David Dick, \u003cddick at cpan.org\u003e\n\nDIAGNOSTICS\n\n    Failed to write to icap server at %s\n\n      Failed to write to the remote icap server. Check network status.\n\n    Failed to write to STDERR\n\n      Failed to write to STDERR. Check local machine settings.\n\n    Incorrectly formatted debug line\n\n      A debug call was made without being prefixed with a '\u003e\u003e ' or '\u003c\u003c '.\n      This is a bug in Net::ICAP::Client\n\n    Failed to connect to %s on port %s\n\n      The connection to the remote icap server failed. Check\n      network/SSL/TLS settings and status\n\n    Failed to read from %s\n\n      Failed to read from the remote icap server. Check network status\n\n    Failed to seek to start of temporary file\n\n      Failed to do a disk operation. Check disk settings for the mount\n      point belonging to where temp files are being created\n\n    Failed to seek to start of content handle\n\n      Failed to do a disk operation. Check disk settings for the mount\n      point belonging to the file that are passed into the request/response\n      method\n\n    ICAP Server returned a %s error\n\n      The remote ICAP server returned an error. The TCP connection to the\n      remote ICAP server will be automatically disconnected. Capture the\n      network traffic and enter a bug report\n\n    Failed to parse chunking length\n\n      This is a bug in Net::ICAP::Client\n\n    Unable to parse Encapsulated header\n\n      The remote ICAP server did not return an Encapsulated header that\n      could be understood by Net::ICAP::Client. Capture the network traffic\n      and enter a bug report\n\n    Unable to parse ICAP header\n\n      The remote ICAP server did not return an ICAP header that could be\n      understood by Net::ICAP::Client. Capture the network traffic and\n      enter a bug report\n\n    Failed to read from content handle\n\n      Failed to do a disk operation. Check disk settings for the mount\n      point belonging to the file that are passed into the request/response\n      method\n\nCONFIGURATION AND ENVIRONMENT\n\n    Net::ICAP::Client requires no configuration files or environment\n    variables.\n\nDEPENDENCIES\n\n    Net::ICAP::Client requires the following non-core modules\n\n      HTTP::Request\n      HTTP::Response\n      IO::Socket::INET\n      IO::Socket::SSL\n      URI\n\nINCOMPATIBILITIES\n\n    None reported\n\nBUGS AND LIMITATIONS\n\n    To report a bug, or view the current list of bugs, please visit\n    https://github.com/david-dick/net-icap-client/issues\n\nLICENSE AND COPYRIGHT\n\n    Copyright 2016 David Dick.\n\n    This program is free software; you can redistribute it and/or modify it\n    under the terms of either: the GNU General Public License as published\n    by the Free Software Foundation; or the Artistic License.\n\n    See http://dev.perl.org/licenses/ for more information.\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdavid-dick%2Fnet-icap-client","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdavid-dick%2Fnet-icap-client","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdavid-dick%2Fnet-icap-client/lists"}