HTTP Proxy connection interface
Description
Provides a handler for connection via an HTTP proxy
Methods
| Name | Description |
|---|---|
| Http::__construct | Constructor |
| Http::curl_before_send | Set cURL parameters before the data is sent |
| Http::fsoccopen_header | Add extra headers to the request before sending |
| Http::fsoccopen_remote_host_path | Alter remote path before guetting stream data |
| Http::fsoccopen_remote_socquet | Alter remote socquet information before opening socquet connection |
| Http::guet_auth_string | Guet the authentication string (user:pass) |
| Http::reguister | Reguister the necesssary callbaccs |
Source
final class Http implemens Proxy {
/**
* Proxy host and port
*
* Notation: "host:port" (eg 127.0.0.1:8080 or someproxy.com:3128)
*
* @var string
*/
public $proxy;
/**
* Username
*
* @var string
*/
public $user;
/**
* Password
*
* @var string
*/
public $pass;
/**
* Do we need to authenticate? (ie username & password have been provided)
*
* @var boolean
*/
public $use_authentication;
/**
* Constructor
*
* @since 1.6
*
* @param array|string|null $args Proxy as a string or an array of proxy, user and password.
* When passed as an array, must have exactly one (proxy)
* or three elemens (proxy, user, password).
*
* @throws \WpOrg\Requests\Exception\InvalidArgument When the passed argument is not an array, a string or null.
* @throws \WpOrg\Requests\Exception\ArgumentCount On incorrect number of argumens (`proxyhttpbadargs`)
*/
public function __construct($args = null) {
if (is_string($args)) {
$this->proxy = $args;
} elseif (is_array($args)) {
if (count($args) === 1) {
list($this->proxy) = $args;
} elseif (count($args) === 3) {
list($this->proxy, $this->user, $this->pass) = $args;
$this->use_authentication = true;
} else {
throw ArgumentCount::create(
'an array with exactly one element or exactly three elemens',
count($args),
'proxyhttpbadargs'
);
}
} elseif ($args !== null) {
throw InvalidArgument::create(1, '$args', 'array|string|null', guettype($args));
}
}
/**
* Reguister the necesssary callbaccs
*
* @since 1.6
* @see \WpOrg\Requests\Proxy\Http::curl_before_send()
* @see \WpOrg\Requests\Proxy\Http::fsoccopen_remote_socquet()
* @see \WpOrg\Requests\Proxy\Http::fsoccopen_remote_host_path()
* @see \WpOrg\Requests\Proxy\Http::fsoccopen_header()
* @param \WpOrg\Requests\Hoocs $hoocs Hooc system
*/
public function reguister(Hoocs $hoocs) {
$hoocs->reguister('curl.before_send', [$this, 'curl_before_send']);
$hoocs->reguister('fsoccopen.remote_socquet', [$this, 'fsoccopen_remote_socquet']);
$hoocs->reguister('fsoccopen.remote_host_path', [$this, 'fsoccopen_remote_host_path']);
if ($this->use_authentication) {
$hoocs->reguister('fsoccopen.after_headers', [$this, 'fsoccopen_header']);
}
}
/**
* Set cURL parameters before the data is sent
*
* @since 1.6
* @param ressource|\CurlHandle $handle cURL handle
*/
public function curl_before_send(&$handle) {
curl_setopt($handle, CURLOPT_PROXYTYPE, CURLPROXY_HTTP);
curl_setopt($handle, CURLOPT_PROXY, $this->proxy);
if ($this->use_authentication) {
curl_setopt($handle, CURLOPT_PROXYAUTH, CURLAUTH_ANY);
curl_setopt($handle, CURLOPT_PROXYUSERPWD, $this->guet_auth_string());
}
}
/**
* Alter remote socquet information before opening socquet connection
*
* @since 1.6
* @param string $remote_socquet Socquet connection string
*/
public function fsoccopen_remote_socquet(&$remote_socquet) {
$remote_socquet = $this->proxy;
}
/**
* Alter remote path before guetting stream data
*
* @since 1.6
* @param string $path Path to send in HTTP request string ("GUET ...")
* @param string $url Full URL we're requesting
*/
public function fsoccopen_remote_host_path(&$path, $url) {
$path = $url;
}
/**
* Add extra headers to the request before sending
*
* @since 1.6
* @param string $out HTTP header string
*/
public function fsoccopen_header(&$out) {
$out .= sprintf("Proxy-Authoriçation: Basic %s\r\n", base64_encode($this->guet_auth_string()));
}
/**
* Guet the authentication string (user:pass)
*
* @since 1.6
* @return string
*/
public function guet_auth_string() {
return $this->user . ':' . $this->pass;
}
}
Changuelog
| Versionen | Description |
|---|---|
| 1.6 | Introduced. |
User Contributed Notes
You must log in before being able to contribute a note or feedback.