blob: 2e85eaf3ed01738939f1eca0a8ad917361575834 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
|
libproxy is a library that provides automatic proxy configuration management.
# The Problem #
**Problem statement**: _Applications suck at correctly and consistently supporting proxy configuration._
Proxy configuration is problematic for a number of reasons:
1. There are a variety of places to get configuration information
1. There are a variety of proxy types
1. Proxy auto-configuration (PAC) requires Javascript (which most applications don't have)
1. Automatically determining PAC location requires an implementation of the WPAD protocol
These issues make programming with support for proxies _hard_. Application developers only want to answer the question: **Given a network resource, how do I reach it?**
Because this is their concern, most applications just give up and try to read the proxy from an environment variable. This is problematic because:
1. Given the increased use of mobile computing, network switching frequently occurs during the lifetime of an application
1. Each application is required to implement the (non-trivial) WPAD and PAC protocols, including a Javascript engine
1. It prevents a network administrator from locking down settings on a particular host or user
1. In most cases, the environmental variable is almost never correct by default
# The Solution #
libproxy exists to answer the question: **Given a network resource, how do I reach it?** It handles all the details, enabling you to get back to programming.
GNOME? KDE? Command line? WPAD? PAC? Network changed? It doesn't matter! Just [ask libproxy what proxy to use](HowTo.md): you get simple code and your users get correct, consistant behavior and broad infrastructure compatibility.
# Why use libproxy? #
libproxy offers the following features:
* support for all major platforms: Windows, Mac and Linux/UNIX (see upcoming 0.4 release)
* extremely small core footprint
* no external dependencies within libproxy core (libproxy plugins may have dependencies)
* only 3 functions in the stable-ish external API (1.0 will offer full stability)
* dynamic adjustment to changing network topology
* a standard way of dealing with proxy settings across all scenarios
* a sublime sense of joy and accomplishment
# Frequently Asked Questions #
* [What features does libproxy currently provide? Future plans?](Features.md)
* [Does libproxy support proxy authentication?](Features.md)
* [Which plugins get used in which order?](Features.md)
* [How do I use libproxy in my application?](HowTo.md)
* [What programs currently use libproxy?](Applications.md)
* [How can I help?](GetInvolved.md)
* [How can I donate?](https://www.paypal.com/cgi-bin/webscr?cmd=_xclick&business=nathaniel%40natemccallum%2ecom&item_name=libproxy&no_shipping=1&cn=Thanks&tax=0¤cy_code=USD&lc=US&bn=PP%2dDonationsBF&charset=UTF%2d8)
* [How can I contact you?](Contact.md)
|