本文整理汇总了PHP中is_proxybypass函数的典型用法代码示例。如果您正苦于以下问题:PHP is_proxybypass函数的具体用法?PHP is_proxybypass怎么用?PHP is_proxybypass使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了is_proxybypass函数的12个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的PHP代码示例。
示例1: rcommon_get_wsdl
/**
* Get WSDL contents
*/
function rcommon_get_wsdl($urlwdsl, $timeout = 20)
{
global $CFG;
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $urlwdsl);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_HEADER, false);
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true);
// curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($curl, CURLOPT_CONNECTTIMEOUT, $timeout);
if (!is_proxybypass($urlwdsl)) {
if (!empty($CFG->proxytype) && $CFG->proxytype == 'HTTP' && !empty($CFG->proxyhost)) {
curl_setopt($curl, CURLOPT_PROXY, $CFG->proxyhost);
if (!empty($CFG->proxyport)) {
curl_setopt($curl, CURLOPT_PROXYPORT, $CFG->proxyport);
}
if (!empty($CFG->proxyuser)) {
curl_setopt($curl, CURLOPT_PROXYUSERPWD, $CFG->proxyuser . ':' . $CFG->proxypassword);
}
}
}
$contents = curl_exec($curl);
curl_close($curl);
return $contents;
}
示例2: __construct
/**
* Constructor
*
* @param string $serverurl a Moodle URL
* @param string $token the token used to do the web service call
*/
public function __construct($serverurl, $token)
{
global $CFG;
$this->serverurl = $serverurl;
$serverurl = $serverurl . '?wstoken=' . $token;
parent::__construct($serverurl);
if (!empty($CFG->proxyhost) && !is_proxybypass($serverurl)) {
$config = array('adapter' => 'Zend_Http_Client_Adapter_Proxy', 'proxy_host' => $CFG->proxyhost, 'proxy_user' => !empty($CFG->proxyuser) ? $CFG->proxyuser : null, 'proxy_pass' => !empty($CFG->proxypassword) ? $CFG->proxypassword : null);
if (!empty($CFG->proxyport)) {
$config['proxy_port'] = $CFG->proxyport;
}
$this->getHttpClient()->setConfig($config);
}
}
示例3: make_execution_widget
/**
* Prepares a renderable widget to execute installation of an available update.
*
* @param available_update_info $info component version to deploy
* @param moodle_url $returnurl URL to return after the installation execution
* @return renderable
*/
public function make_execution_widget(available_update_info $info, moodle_url $returnurl = null)
{
global $CFG;
if (!$this->initialized()) {
throw new coding_exception('Illegal method call - deployer not initialized.');
}
$pluginrootpaths = get_plugin_types(true);
list($plugintype, $pluginname) = normalize_component($info->component);
if (empty($pluginrootpaths[$plugintype])) {
throw new coding_exception('Unknown plugin type root location', $plugintype);
}
list($passfile, $password) = $this->prepare_authorization();
if (is_null($returnurl)) {
$returnurl = new moodle_url('/admin');
} else {
$returnurl = $returnurl;
}
$params = array('upgrade' => true, 'type' => $plugintype, 'name' => $pluginname, 'typeroot' => $pluginrootpaths[$plugintype], 'package' => $info->download, 'md5' => $info->downloadmd5, 'dataroot' => $CFG->dataroot, 'dirroot' => $CFG->dirroot, 'passfile' => $passfile, 'password' => $password, 'returnurl' => $returnurl->out(false));
if (!empty($CFG->proxyhost)) {
// MDL-36973 - Beware - we should call just !is_proxybypass() here. But currently, our
// cURL wrapper class does not do it. So, to have consistent behaviour, we pass proxy
// setting regardless the $CFG->proxybypass setting. Once the {@link curl} class is
// fixed, the condition should be amended.
if (true or !is_proxybypass($info->download)) {
if (empty($CFG->proxyport)) {
$params['proxy'] = $CFG->proxyhost;
} else {
$params['proxy'] = $CFG->proxyhost . ':' . $CFG->proxyport;
}
if (!empty($CFG->proxyuser) and !empty($CFG->proxypassword)) {
$params['proxyuserpwd'] = $CFG->proxyuser . ':' . $CFG->proxypassword;
}
if (!empty($CFG->proxytype)) {
$params['proxytype'] = $CFG->proxytype;
}
}
}
$widget = new single_button(new moodle_url('/mdeploy.php', $params), get_string('updateavailableinstall', 'core_admin'), 'post');
return $widget;
}
示例4: apply_opt
/**
* Set options for individual curl instance
*
* @param resource $curl A curl handle
* @param array $options
* @return resource The curl handle
*/
private function apply_opt($curl, $options)
{
// Clean up
$this->cleanopt();
// set cookie
if (!empty($this->cookie) || !empty($options['cookie'])) {
$this->setopt(array('cookiejar' => $this->cookie, 'cookiefile' => $this->cookie));
}
// Bypass proxy if required.
if ($this->proxy === null) {
if (!empty($this->options['CURLOPT_URL']) and is_proxybypass($this->options['CURLOPT_URL'])) {
$proxy = false;
} else {
$proxy = true;
}
} else {
$proxy = (bool) $this->proxy;
}
// Set proxy.
if ($proxy) {
$options['CURLOPT_PROXY'] = $this->proxy_host;
} else {
unset($this->options['CURLOPT_PROXY']);
}
$this->setopt($options);
// Reset before set options.
curl_setopt($curl, CURLOPT_HEADERFUNCTION, array(&$this, 'formatHeader'));
// Setting the User-Agent based on options provided.
$useragent = '';
if (!empty($options['CURLOPT_USERAGENT'])) {
$useragent = $options['CURLOPT_USERAGENT'];
} else {
if (!empty($this->options['CURLOPT_USERAGENT'])) {
$useragent = $this->options['CURLOPT_USERAGENT'];
} else {
$useragent = 'MoodleBot/1.0';
}
}
// Set headers.
if (empty($this->header)) {
$this->setHeader(array('User-Agent: ' . $useragent, 'Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7', 'Connection: keep-alive'));
} else {
if (!in_array('User-Agent: ' . $useragent, $this->header)) {
// Remove old User-Agent if one existed.
// We have to partial search since we don't know what the original User-Agent is.
if ($match = preg_grep('/User-Agent.*/', $this->header)) {
$key = array_keys($match)[0];
unset($this->header[$key]);
}
$this->setHeader(array('User-Agent: ' . $useragent));
}
}
curl_setopt($curl, CURLOPT_HTTPHEADER, $this->header);
if ($this->debug) {
echo '<h1>Options</h1>';
var_dump($this->options);
echo '<h1>Header</h1>';
var_dump($this->header);
}
// Do not allow infinite redirects.
if (!isset($this->options['CURLOPT_MAXREDIRS'])) {
$this->options['CURLOPT_MAXREDIRS'] = 0;
} else {
if ($this->options['CURLOPT_MAXREDIRS'] > 100) {
$this->options['CURLOPT_MAXREDIRS'] = 100;
} else {
$this->options['CURLOPT_MAXREDIRS'] = (int) $this->options['CURLOPT_MAXREDIRS'];
}
}
// Make sure we always know if redirects expected.
if (!isset($this->options['CURLOPT_FOLLOWLOCATION'])) {
$this->options['CURLOPT_FOLLOWLOCATION'] = 0;
}
// Limit the protocols to HTTP and HTTPS.
if (defined('CURLOPT_PROTOCOLS')) {
$this->options['CURLOPT_PROTOCOLS'] = CURLPROTO_HTTP | CURLPROTO_HTTPS;
$this->options['CURLOPT_REDIR_PROTOCOLS'] = CURLPROTO_HTTP | CURLPROTO_HTTPS;
}
// Set options.
foreach ($this->options as $name => $val) {
if ($name === 'CURLOPT_FOLLOWLOCATION' and $this->emulateredirects) {
// The redirects are emulated elsewhere.
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 0);
continue;
}
$name = constant($name);
curl_setopt($curl, $name, $val);
}
return $curl;
}
示例5: download_file_content
/**
* Fetches content of file from Internet (using proxy if defined). Uses cURL extension if present.
* Due to security concerns only downloads from http(s) sources are supported.
*
* @param string $url file url starting with http(s)://
* @param array $headers http headers, null if none. If set, should be an
* associative array of header name => value pairs.
* @param array $postdata array means use POST request with given parameters
* @param bool $fullresponse return headers, responses, etc in a similar way snoopy does
* (if false, just returns content)
* @param int $timeout timeout for complete download process including all file transfer
* (default 5 minutes)
* @param int $connecttimeout timeout for connection to server; this is the timeout that
* usually happens if the remote server is completely down (default 20 seconds);
* may not work when using proxy
* @param bool $skipcertverify If true, the peer's SSL certificate will not be checked.
* Only use this when already in a trusted location.
* @param string $tofile store the downloaded content to file instead of returning it.
* @param bool $calctimeout false by default, true enables an extra head request to try and determine
* filesize and appropriately larger timeout based on $CFG->curltimeoutkbitrate
* @return mixed false if request failed or content of the file as string if ok. True if file downloaded into $tofile successfully.
*/
function download_file_content($url, $headers = null, $postdata = null, $fullresponse = false, $timeout = 300, $connecttimeout = 20, $skipcertverify = false, $tofile = NULL, $calctimeout = false)
{
global $CFG;
// some extra security
$newlines = array("\r", "\n");
if (is_array($headers)) {
foreach ($headers as $key => $value) {
$headers[$key] = str_replace($newlines, '', $value);
}
}
$url = str_replace($newlines, '', $url);
if (!preg_match('|^https?://|i', $url)) {
if ($fullresponse) {
$response = new stdClass();
$response->status = 0;
$response->headers = array();
$response->response_code = 'Invalid protocol specified in url';
$response->results = '';
$response->error = 'Invalid protocol specified in url';
return $response;
} else {
return false;
}
}
// check if proxy (if used) should be bypassed for this url
$proxybypass = is_proxybypass($url);
if (!($ch = curl_init($url))) {
debugging('Can not init curl.');
return false;
}
// set extra headers
if (is_array($headers)) {
$headers2 = array();
foreach ($headers as $key => $value) {
$headers2[] = "{$key}: {$value}";
}
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers2);
}
if ($skipcertverify) {
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
}
// use POST if requested
if (is_array($postdata)) {
$postdata = format_postdata_for_curlcall($postdata);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $postdata);
}
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HEADER, false);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $connecttimeout);
if (!ini_get('open_basedir') and !ini_get('safe_mode')) {
// TODO: add version test for '7.10.5'
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_MAXREDIRS, 5);
}
if (!empty($CFG->proxyhost) and !$proxybypass) {
// SOCKS supported in PHP5 only
if (!empty($CFG->proxytype) and $CFG->proxytype == 'SOCKS5') {
if (defined('CURLPROXY_SOCKS5')) {
curl_setopt($ch, CURLOPT_PROXYTYPE, CURLPROXY_SOCKS5);
} else {
curl_close($ch);
if ($fullresponse) {
$response = new stdClass();
$response->status = '0';
$response->headers = array();
$response->response_code = 'SOCKS5 proxy is not supported in PHP4';
$response->results = '';
$response->error = 'SOCKS5 proxy is not supported in PHP4';
return $response;
} else {
debugging("SOCKS5 proxy is not supported in PHP4.", DEBUG_ALL);
return false;
}
}
}
curl_setopt($ch, CURLOPT_HTTPPROXYTUNNEL, false);
if (empty($CFG->proxyport)) {
//.........这里部分代码省略.........
示例6: apply_opt
/**
* Set options for individual curl instance
*
* @param resource $curl A curl handle
* @param array $options
* @return resource The curl handle
*/
private function apply_opt($curl, $options)
{
// Some more security first.
if (defined('CURLOPT_PROTOCOLS')) {
$this->options['CURLOPT_PROTOCOLS'] = CURLPROTO_HTTP | CURLPROTO_HTTPS;
}
if (defined('CURLOPT_REDIR_PROTOCOLS')) {
$this->options['CURLOPT_REDIR_PROTOCOLS'] = CURLPROTO_HTTP | CURLPROTO_HTTPS;
}
// Clean up
$this->cleanopt();
// set cookie
if (!empty($this->cookie) || !empty($options['cookie'])) {
$this->setopt(array('cookiejar' => $this->cookie, 'cookiefile' => $this->cookie));
}
// Bypass proxy if required.
if ($this->proxy === null) {
if (!empty($this->options['CURLOPT_URL']) and is_proxybypass($this->options['CURLOPT_URL'])) {
$proxy = false;
} else {
$proxy = true;
}
} else {
$proxy = (bool) $this->proxy;
}
// Set proxy.
if ($proxy) {
$options['CURLOPT_PROXY'] = $this->proxy_host;
} else {
unset($this->options['CURLOPT_PROXY']);
}
$this->setopt($options);
// reset before set options
curl_setopt($curl, CURLOPT_HEADERFUNCTION, array(&$this, 'formatHeader'));
// set headers
if (empty($this->header)) {
$this->setHeader(array('User-Agent: MoodleBot/1.0', 'Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7', 'Connection: keep-alive'));
}
curl_setopt($curl, CURLOPT_HTTPHEADER, $this->header);
if ($this->debug) {
echo '<h1>Options</h1>';
var_dump($this->options);
echo '<h1>Header</h1>';
var_dump($this->header);
}
// Do not allow infinite redirects.
if (!isset($this->options['CURLOPT_MAXREDIRS'])) {
$this->options['CURLOPT_MAXREDIRS'] = 0;
} else {
if ($this->options['CURLOPT_MAXREDIRS'] > 100) {
$this->options['CURLOPT_MAXREDIRS'] = 100;
} else {
$this->options['CURLOPT_MAXREDIRS'] = (int) $this->options['CURLOPT_MAXREDIRS'];
}
}
// Make sure we always know if redirects expected.
if (!isset($this->options['CURLOPT_FOLLOWLOCATION'])) {
$this->options['CURLOPT_FOLLOWLOCATION'] = 0;
}
// Set options.
foreach ($this->options as $name => $val) {
if ($name === 'CURLOPT_PROTOCOLS' or $name === 'CURLOPT_REDIR_PROTOCOLS') {
// These can not be changed, sorry.
continue;
}
if ($name === 'CURLOPT_FOLLOWLOCATION' and $this->emulateredirects) {
// The redirects are emulated elsewhere.
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 0);
continue;
}
$name = constant($name);
curl_setopt($curl, $name, $val);
}
return $curl;
}
示例7: connectCAS
/**
* Connect to the CAS (clientcas connection or proxycas connection)
*
*/
function connectCAS()
{
global $CFG;
static $connected = false;
if (!$connected) {
// Make sure phpCAS doesn't try to start a new PHP session when connecting to the CAS server.
if ($this->config->proxycas) {
phpCAS::proxy($this->config->casversion, $this->config->hostname, (int) $this->config->port, $this->config->baseuri, false);
} else {
phpCAS::client($this->config->casversion, $this->config->hostname, (int) $this->config->port, $this->config->baseuri, false);
}
$connected = true;
}
// If Moodle is configured to use a proxy, phpCAS needs some curl options set.
if (!empty($CFG->proxyhost) && !is_proxybypass($this->config->hostname)) {
phpCAS::setExtraCurlOption(CURLOPT_PROXY, $CFG->proxyhost);
if (!empty($CFG->proxyport)) {
phpCAS::setExtraCurlOption(CURLOPT_PROXYPORT, $CFG->proxyport);
}
if (!empty($CFG->proxytype)) {
// Only set CURLOPT_PROXYTYPE if it's something other than the curl-default http
if ($CFG->proxytype == 'SOCKS5') {
phpCAS::setExtraCurlOption(CURLOPT_PROXYTYPE, CURLPROXY_SOCKS5);
}
}
if (!empty($CFG->proxyuser) and !empty($CFG->proxypassword)) {
phpCAS::setExtraCurlOption(CURLOPT_PROXYUSERPWD, $CFG->proxyuser . ':' . $CFG->proxypassword);
if (defined('CURLOPT_PROXYAUTH')) {
// any proxy authentication if PHP 5.1
phpCAS::setExtraCurlOption(CURLOPT_PROXYAUTH, CURLAUTH_BASIC | CURLAUTH_NTLM);
}
}
}
if ($this->config->certificate_check && $this->config->certificate_path) {
phpCAS::setCasServerCACert($this->config->certificate_path);
} else {
// Don't try to validate the server SSL credentials
phpCAS::setNoCasServerValidation();
}
}
示例8: mnet_get_public_key
/**
* Get the remote machine's SSL Cert
*
* @param string $uri The URI of a file on the remote computer, including
* its http:// or https:// prefix
* @return string A PEM formatted SSL Certificate.
*/
function mnet_get_public_key($uri, $application=null) {
global $CFG, $DB;
$mnet = get_mnet_environment();
// The key may be cached in the mnet_set_public_key function...
// check this first
$key = mnet_set_public_key($uri);
if ($key != false) {
return $key;
}
if (empty($application)) {
$application = $DB->get_record('mnet_application', array('name'=>'moodle'));
}
$rq = xmlrpc_encode_request('system/keyswap', array($CFG->wwwroot, $mnet->public_key, $application->name), array("encoding" => "utf-8"));
$ch = curl_init($uri . $application->xmlrpc_server_url);
curl_setopt($ch, CURLOPT_TIMEOUT, 60);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_USERAGENT, 'Moodle');
curl_setopt($ch, CURLOPT_POSTFIELDS, $rq);
curl_setopt($ch, CURLOPT_HTTPHEADER, array("Content-Type: text/xml charset=UTF-8"));
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
// check for proxy
if (!empty($CFG->proxyhost) and !is_proxybypass($uri)) {
// SOCKS supported in PHP5 only
if (!empty($CFG->proxytype) and ($CFG->proxytype == 'SOCKS5')) {
if (defined('CURLPROXY_SOCKS5')) {
curl_setopt($ch, CURLOPT_PROXYTYPE, CURLPROXY_SOCKS5);
} else {
curl_close($ch);
print_error( 'socksnotsupported','mnet' );
}
}
curl_setopt($ch, CURLOPT_HTTPPROXYTUNNEL, false);
if (empty($CFG->proxyport)) {
curl_setopt($ch, CURLOPT_PROXY, $CFG->proxyhost);
} else {
curl_setopt($ch, CURLOPT_PROXY, $CFG->proxyhost.':'.$CFG->proxyport);
}
if (!empty($CFG->proxyuser) and !empty($CFG->proxypassword)) {
curl_setopt($ch, CURLOPT_PROXYUSERPWD, $CFG->proxyuser.':'.$CFG->proxypassword);
if (defined('CURLOPT_PROXYAUTH')) {
// any proxy authentication if PHP 5.1
curl_setopt($ch, CURLOPT_PROXYAUTH, CURLAUTH_BASIC | CURLAUTH_NTLM);
}
}
}
$res = xmlrpc_decode(curl_exec($ch));
// check for curl errors
$curlerrno = curl_errno($ch);
if ($curlerrno!=0) {
debugging("Request for $uri failed with curl error $curlerrno");
}
// check HTTP error code
$info = curl_getinfo($ch);
if (!empty($info['http_code']) and ($info['http_code'] != 200)) {
debugging("Request for $uri failed with HTTP code ".$info['http_code']);
}
curl_close($ch);
if (!is_array($res)) { // ! error
$public_certificate = $res;
$credentials=array();
if (strlen(trim($public_certificate))) {
$credentials = openssl_x509_parse($public_certificate);
$host = $credentials['subject']['CN'];
if (array_key_exists( 'subjectAltName', $credentials['subject'])) {
$host = $credentials['subject']['subjectAltName'];
}
if (strpos($uri, $host) !== false) {
mnet_set_public_key($uri, $public_certificate);
return $public_certificate;
}
else {
debugging("Request for $uri returned public key for different URI - $host");
}
}
else {
debugging("Request for $uri returned empty response");
}
}
else {
//.........这里部分代码省略.........
示例9: download_file_content
/**
* Fetches content of file from Internet (using proxy if defined). Uses cURL extension if present.
* Due to security concerns only downloads from http(s) sources are supported.
*
* @param string $url file url starting with http(s)://
* @param array $headers http headers, null if none. If set, should be an
* associative array of header name => value pairs.
* @param array $postdata array means use POST request with given parameters
* @param bool $fullresponse return headers, responses, etc in a similar way snoopy does
* (if false, just returns content)
* @param int $timeout timeout for complete download process including all file transfer
* (default 5 minutes)
* @param int $connecttimeout timeout for connection to server; this is the timeout that
* usually happens if the remote server is completely down (default 20 seconds);
* may not work when using proxy
* @param bool $skipcertverify If true, the peer's SSL certificate will not be checked. Only use this when already in a trusted location.
* @return mixed false if request failed or content of the file as string if ok.
*/
function download_file_content($url, $headers = null, $postdata = null, $fullresponse = false, $timeout = 300, $connecttimeout = 20, $skipcertverify = false)
{
global $CFG;
// some extra security
$newlines = array("\r", "\n");
if (is_array($headers)) {
foreach ($headers as $key => $value) {
$headers[$key] = str_replace($newlines, '', $value);
}
}
$url = str_replace($newlines, '', $url);
if (!preg_match('|^https?://|i', $url)) {
if ($fullresponse) {
$response = new object();
$response->status = 0;
$response->headers = array();
$response->response_code = 'Invalid protocol specified in url';
$response->results = '';
$response->error = 'Invalid protocol specified in url';
return $response;
} else {
return false;
}
}
// check if proxy (if used) should be bypassed for this url
$proxybypass = is_proxybypass($url);
if (!($ch = curl_init($url))) {
debugging('Can not init curl.');
return false;
}
// set extra headers
if (is_array($headers)) {
$headers2 = array();
foreach ($headers as $key => $value) {
$headers2[] = "{$key}: {$value}";
}
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers2);
}
if ($skipcertverify) {
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
}
// use POST if requested
if (is_array($postdata)) {
foreach ($postdata as $k => $v) {
$postdata[$k] = urlencode($k) . '=' . urlencode($v);
}
$postdata = implode('&', $postdata);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $postdata);
}
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HEADER, true);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $connecttimeout);
curl_setopt($ch, CURLOPT_TIMEOUT, $timeout);
if (!ini_get('open_basedir') and !ini_get('safe_mode')) {
// TODO: add version test for '7.10.5'
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_MAXREDIRS, 5);
}
if (!empty($CFG->proxyhost) and !$proxybypass) {
// SOCKS supported in PHP5 only
if (!empty($CFG->proxytype) and $CFG->proxytype == 'SOCKS5') {
if (defined('CURLPROXY_SOCKS5')) {
curl_setopt($ch, CURLOPT_PROXYTYPE, CURLPROXY_SOCKS5);
} else {
curl_close($ch);
if ($fullresponse) {
$response = new object();
$response->status = '0';
$response->headers = array();
$response->response_code = 'SOCKS5 proxy is not supported in PHP4';
$response->results = '';
$response->error = 'SOCKS5 proxy is not supported in PHP4';
return $response;
} else {
debugging("SOCKS5 proxy is not supported in PHP4.", DEBUG_ALL);
return false;
}
}
}
curl_setopt($ch, CURLOPT_HTTPPROXYTUNNEL, false);
if (empty($CFG->proxyport)) {
//.........这里部分代码省略.........
示例10: apply_opt
/**
* Set options for individual curl instance
*
* @param resource $curl A curl handle
* @param array $options
* @return resource The curl handle
*/
private function apply_opt($curl, $options)
{
// Clean up
$this->cleanopt();
// set cookie
if (!empty($this->cookie) || !empty($options['cookie'])) {
$this->setopt(array('cookiejar' => $this->cookie, 'cookiefile' => $this->cookie));
}
// set proxy
if (!empty($this->proxy) || !empty($options['proxy'])) {
$this->setopt($this->proxy);
}
$this->setopt($options);
// reset before set options
curl_setopt($curl, CURLOPT_HEADERFUNCTION, array(&$this, 'formatHeader'));
// set headers
if (empty($this->header)) {
$this->setHeader(array('User-Agent: MoodleBot/1.0', 'Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7', 'Connection: keep-alive'));
}
curl_setopt($curl, CURLOPT_HTTPHEADER, $this->header);
// Bypass proxy (for this request only) if required.
if (!empty($this->options['CURLOPT_URL']) && is_proxybypass($this->options['CURLOPT_URL'])) {
unset($this->options['CURLOPT_PROXY']);
}
if ($this->debug) {
echo '<h1>Options</h1>';
var_dump($this->options);
echo '<h1>Header</h1>';
var_dump($this->header);
}
// Set options.
foreach ($this->options as $name => $val) {
$name = constant(strtoupper($name));
curl_setopt($curl, $name, $val);
}
return $curl;
}
示例11: newServiceCall
/**
* Makes API requests using cURL and a signed header
* @param String $method
* The API method to which the request is going to be made
* @param mixed $parameters
* The parameters of the API request can be either an associative array or simple data types
* @return mixed $result
* An array of data when the API request was successful, false on error.
* Make sure you use the identical operator to check the response (!==FALSE) some response may be 0
* @throws moodle_exception
* The required configuration parameters of the API are not set
*/
public function newServiceCall($method, $parameters = null)
{
global $USER, $CFG;
//Test if connection settings have the correct format
$config_fields = array('filter_babelium_serverdomain', 'filter_babelium_serverport', 'filter_babelium_apidomain', 'filter_babelium_apiendpoint', 'filter_babelium_accesskey', 'filter_babelium_secretaccesskey');
foreach ($config_fields as $cfield) {
if (!isset($CFG->{$cfield}) || empty($CFG->{$cfield})) {
$this->display_error('babeliumErrorConfigParameters');
}
if ($cfield == 'filter_babelium_accesskey' && strlen($CFG->{$cfield}) != 20 || $cfield == 'filter_babelium_secretaccesskey' && strlen($CFG->{$cfield}) != 40) {
$this->display_error('babeliumErrorConfigParameters');
}
}
$commProtocol = 'http://';
$request = array();
$request['method'] = $method;
if ($parameters != null && is_array($parameters) && count($parameters) > 0) {
$request['parameters'] = $parameters;
}
//Date timestamp formated following one of the standards allowed for HTTP 1.1 date headers (DATE_RFC1123)
$date = date("D, d M Y H:i:s O");
$referer = $_SERVER['HTTP_REFERER'];
$pieces = parse_url($referer);
$originhost = $_SERVER['HTTP_HOST'];
$origin = $pieces['scheme'] . "://" . $originhost;
$request['header']['date'] = $date;
$signature = "BMP " . $CFG->filter_babelium_accesskey . ":" . $this->generateAuthorization($method, $date, $originhost, $CFG->filter_babelium_secretaccesskey);
$request['header']['authorization'] = $signature;
//See this workaround if the query parameters are written with & : http://es.php.net/manual/es/function.http-build-query.php#102324
$request = http_build_query($request, '', '&');
$web_domain = $CFG->filter_babelium_serverdomain;
$api_domain = $CFG->filter_babelium_apidomain;
$api_endpoint = $CFG->filter_babelium_apiendpoint;
$api_url = $commProtocol . $api_domain . '/' . $api_endpoint;
$query_string = $api_url . '?' . $method;
//Check if proxy (if used) should be bypassed for this url
$proxybypass = function_exists('is_proxybypass') ? is_proxybypass($query_string) : false;
//Prepare the cURL request
if (!($ch = curl_init($query_string))) {
debugging('Can not init curl.');
return false;
}
//curl_setopt($ch, CURLOPT_URL, $query_string);
curl_setopt($ch, CURLOPT_POSTFIELDS, $request);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_HEADER, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_REFERER, $referer);
curl_setopt($ch, CURLOPT_HTTPHEADER, array("Origin: {$origin}"));
//Check for proxy configuration
if (!empty($CFG->proxyhost) and !$proxybypass) {
// SOCKS supported in PHP5 only
if (!empty($CFG->proxytype) and $CFG->proxytype == 'SOCKS5') {
if (defined('CURLPROXY_SOCKS5')) {
curl_setopt($ch, CURLOPT_PROXYTYPE, CURLPROXY_SOCKS5);
} else {
curl_close($ch);
debugging("SOCKS5 proxy is not supported in PHP4.", DEBUG_ALL);
return false;
}
}
curl_setopt($ch, CURLOPT_HTTPPROXYTUNNEL, false);
if (empty($CFG->proxyport)) {
curl_setopt($ch, CURLOPT_PROXY, $CFG->proxyhost);
} else {
curl_setopt($ch, CURLOPT_PROXY, $CFG->proxyhost . ':' . $CFG->proxyport);
}
if (!empty($CFG->proxyuser) and !empty($CFG->proxypassword)) {
curl_setopt($ch, CURLOPT_PROXYUSERPWD, $CFG->proxyuser . ':' . $CFG->proxypassword);
if (defined('CURLOPT_PROXYAUTH')) {
// any proxy authentication if PHP 5.1
curl_setopt($ch, CURLOPT_PROXYAUTH, CURLAUTH_BASIC | CURLAUTH_NTLM);
}
}
}
$result = curl_exec($ch);
curl_close($ch);
//Parses the response output to separate the headers from the body of the response
$this->parseCurlOutput($result);
//Add the service call to the activity log to better track down possible problems
$this->activity_log($USER->id, $USER->username, "service_call", $query_string, $method, is_array($parameters) ? implode('&', $parameters) : $parameters, $date, $_SERVER['HTTP_HOST'], $signature, $this->_curlHeaderHttpStatusCode, $this->_curlHeaderHttpStatusMessage);
//If the body of the response is empty or the HTTP status code is not 200 display an error message
if (!$this->_curlResponse || $this->_curlHeaderHttpStatusCode != 200) {
$this->display_error('babeliumApiErrorCode' . $this->_curlHeaderHttpStatusCode);
}
$result = json_decode($this->_curlResponse, true);
if ($result['status'] == 'success' && $result['response']) {
$result = $result['response'];
//.........这里部分代码省略.........
示例12: fire_vhost_cron
/**
* fire a cron URL using CURL.
*
*
*/
function fire_vhost_cron($vhost)
{
global $VCRON, $DB;
if ($VCRON->TRACE_ENABLE) {
$CRONTRACE = fopen($VCRON->TRACE, 'a');
}
$ch = curl_init($vhost->root_web . '/main/cron/run.php');
$http_proxy_host = api_get_setting('vchamilo_httpproxyhost', 'vchamilo');
$http_proxy_port = api_get_setting('vchamilo_httpproxyport', 'vchamilo');
$http_proxy_bypass = api_get_setting('vchamilo_httpproxybypass', 'vchamilo');
$http_proxy_user = api_get_setting('vchamilo_httpproxyuser', 'vchamilo');
$http_proxy_password = api_get_setting('vchamilo_httpproxypassword', 'vchamilo');
curl_setopt($ch, CURLOPT_TIMEOUT, $VCRON->TIMEOUT);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_USERAGENT, 'Chamilo');
curl_setopt($ch, CURLOPT_POSTFIELDS, '');
curl_setopt($ch, CURLOPT_HTTPHEADER, array("Content-Type: text/xml charset=UTF-8"));
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
// Check for proxy.
if (!empty($http_proxy_host) and !is_proxybypass($uri)) {
curl_setopt($ch, CURLOPT_HTTPPROXYTUNNEL, false);
if (empty($http_proxy_port)) {
echo "Using proxy {$http_proxy_host}\n";
curl_setopt($ch, CURLOPT_PROXY, $http_proxy_host);
} else {
echo "Using proxy {$http_proxy_host}:{$http_proxy_port}\n";
curl_setopt($ch, CURLOPT_PROXY, $http_proxy_host . ':' . $http_proxy_port);
}
if (!empty($http_proxy_user) and !empty($http_proxy_password)) {
curl_setopt($ch, CURLOPT_PROXYUSERPWD, $http_proxy_user . ':' . $http_proxy_password);
if (defined('CURLOPT_PROXYAUTH')) {
// any proxy authentication if PHP 5.1
curl_setopt($ch, CURLOPT_PROXYAUTH, CURLAUTH_BASIC | CURLAUTH_NTLM);
}
}
}
$timestamp_send = time();
$rawresponse = curl_exec($ch);
$timestamp_receive = time();
if ($rawresponse === false) {
$error = curl_errno($ch) . ':' . curl_error($ch);
if ($VCRON->TRACE_ENABLE) {
if ($CRONTRACE) {
fputs($CRONTRACE, "VCron start on {$vhost->root_web} : " . api_time_to_hms($timestamp_send) . "\n");
fputs($CRONTRACE, "VCron Error : {$error} \n");
fputs($CRONTRACE, "VCron stop on {$vhost->root_web} : {$timestamp_receive}\n#################\n\n");
fclose($CRONTRACE);
}
}
echo "VCron started on {$vhost->root_web} : " . api_time_to_hms($timestamp_send) . "\n";
echo "VCron Error : {$error} \n";
echo "VCron stop on {$vhost->root_web} : " . api_time_to_hms($timestamp_receive) . "\n#################\n\n";
return false;
}
if ($VCRON->TRACE_ENABLE) {
if ($CRONTRACE) {
fputs($CRONTRACE, "VCron start on {$vhost->vhostname} : " . api_time_to_hms($timestamp_send) . "\n");
fputs($CRONTRACE, $rawresponse . "\n");
fputs($CRONTRACE, "VCron stop on {$vhost->vhostname} : " . api_time_to_hms($timestamp_receive) . "\n#################\n\n");
fclose($CRONTRACE);
}
}
echo "VCron start on {$vhost->root_web} : " . api_time_to_hms($timestamp_send) . "\n";
echo $rawresponse . "\n";
echo "VCron stop on {$vhost->root_web} : " . api_time_to_hms($timestamp_receive) . "\n#################\n\n";
$vhost->lastcrongap = time() - $vhost->lastcron;
$vhost->lastcron = $timestamp_send;
$vhost->croncount++;
$vhostid = $vhost->id;
unset($vhost->id);
Database::update('vchamilo', (array) $vhost, array('id = ?' => $vhostid));
}