[ Index ]

PHP Cross Reference of WordPress Trunk (Updated Daily)

Search

title

Body

[close]

/wp-includes/Requests/Proxy/ -> HTTP.php (source)

   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  }


Generated : Thu Dec 15 08:20:01 2022 Cross-referenced by PHPXref