[ Index ] |
PHP Cross Reference of WordPress |
[Summary view] [Print] [Text view]
1 <?php 2 /** 3 * HTTP Proxy connection interface 4 * 5 * @package Requests 6 * @subpackage Proxy 7 * @since 1.6 8 */ 9 10 /** 11 * HTTP Proxy connection interface 12 * 13 * Provides a handler for connection via an HTTP proxy 14 * 15 * @package Requests 16 * @subpackage Proxy 17 * @since 1.6 18 */ 19 class Requests_Proxy_HTTP implements Requests_Proxy { 20 /** 21 * Proxy host and port 22 * 23 * Notation: "host:port" (eg 127.0.0.1:8080 or someproxy.com:3128) 24 * 25 * @var string 26 */ 27 public $proxy; 28 29 /** 30 * Username 31 * 32 * @var string 33 */ 34 public $user; 35 36 /** 37 * Password 38 * 39 * @var string 40 */ 41 public $pass; 42 43 /** 44 * Do we need to authenticate? (ie username & password have been provided) 45 * 46 * @var boolean 47 */ 48 public $use_authentication; 49 50 /** 51 * Constructor 52 * 53 * @since 1.6 54 * @throws Requests_Exception On incorrect number of arguments (`authbasicbadargs`) 55 * @param array|null $args Array of user and password. Must have exactly two elements 56 */ 57 public function __construct($args = null) { 58 if (is_string($args)) { 59 $this->proxy = $args; 60 } 61 elseif (is_array($args)) { 62 if (count($args) === 1) { 63 list($this->proxy) = $args; 64 } 65 elseif (count($args) === 3) { 66 list($this->proxy, $this->user, $this->pass) = $args; 67 $this->use_authentication = true; 68 } 69 else { 70 throw new Requests_Exception('Invalid number of arguments', 'proxyhttpbadargs'); 71 } 72 } 73 } 74 75 /** 76 * Register the necessary callbacks 77 * 78 * @since 1.6 79 * @see curl_before_send 80 * @see fsockopen_remote_socket 81 * @see fsockopen_remote_host_path 82 * @see fsockopen_header 83 * @param Requests_Hooks $hooks Hook system 84 */ 85 public function register(Requests_Hooks $hooks) { 86 $hooks->register('curl.before_send', array($this, 'curl_before_send')); 87 88 $hooks->register('fsockopen.remote_socket', array($this, 'fsockopen_remote_socket')); 89 $hooks->register('fsockopen.remote_host_path', array($this, 'fsockopen_remote_host_path')); 90 if ($this->use_authentication) { 91 $hooks->register('fsockopen.after_headers', array($this, 'fsockopen_header')); 92 } 93 } 94 95 /** 96 * Set cURL parameters before the data is sent 97 * 98 * @since 1.6 99 * @param resource $handle cURL resource 100 */ 101 public function curl_before_send(&$handle) { 102 curl_setopt($handle, CURLOPT_PROXYTYPE, CURLPROXY_HTTP); 103 curl_setopt($handle, CURLOPT_PROXY, $this->proxy); 104 105 if ($this->use_authentication) { 106 curl_setopt($handle, CURLOPT_PROXYAUTH, CURLAUTH_ANY); 107 curl_setopt($handle, CURLOPT_PROXYUSERPWD, $this->get_auth_string()); 108 } 109 } 110 111 /** 112 * Alter remote socket information before opening socket connection 113 * 114 * @since 1.6 115 * @param string $remote_socket Socket connection string 116 */ 117 public function fsockopen_remote_socket(&$remote_socket) { 118 $remote_socket = $this->proxy; 119 } 120 121 /** 122 * Alter remote path before getting stream data 123 * 124 * @since 1.6 125 * @param string $path Path to send in HTTP request string ("GET ...") 126 * @param string $url Full URL we're requesting 127 */ 128 public function fsockopen_remote_host_path(&$path, $url) { 129 $path = $url; 130 } 131 132 /** 133 * Add extra headers to the request before sending 134 * 135 * @since 1.6 136 * @param string $out HTTP header string 137 */ 138 public function fsockopen_header(&$out) { 139 $out .= sprintf("Proxy-Authorization: Basic %s\r\n", base64_encode($this->get_auth_string())); 140 } 141 142 /** 143 * Get the authentication string (user:pass) 144 * 145 * @since 1.6 146 * @return string 147 */ 148 public function get_auth_string() { 149 return $this->user . ':' . $this->pass; 150 } 151 }
title
Description
Body
title
Description
Body
title
Description
Body
title
Body
Generated: Thu Dec 15 01:00:02 2022 | Cross-referenced by PHPXref 0.7.1 |