Answer the question
In order to leave comments, you need to log in
How to assign global variable in PHP class?
I use the cUrl wrapper class for my needs. So the problem is the following, you need to use a proxy, but the problem is that you need to specify the proxy assignment in each function where the request goes through curl, is it possible to do something like a global variable? class example below under the spoiler:
<?php
/**
*
* Файл-обертка для библиотеки cURL
*
*/
class Curl
{
const FOLLOWLOCATION = true;
const RETURNTRANSFER = true;
const AUTOREFERER = true;
const TIMEOUT = 30;
const CONNECT_TIME = 30;
public $user_agent = null;
public $proxy;
private $ch = null;
private $url = null;
private $httpheaders = [];
private $postparams = null;
private $proxy_type = null;
private $cookies = null;
public function __construct()
{
$this->ch = curl_init();
}
// Функция POST/GET - запросов
public function post($url, $postparams = [])
{
$this->url = $url;
if (isset($postparams)) {
$this->postparams = $postparams;
}
return $this->exec();
}
// Заголовок запроса (!)
public function addHttpheaders($headers)
{
foreach ($headers as $name => $value) {
if ($name == 'POST') {
$this->httpheaders[$name] = $name . ' ' . $value;
} else {
$this->httpheaders[$name] = $name . ': ' . $value;
}
}
}
// Присваемваем USER-AGENT
public function setUserAgent($user_agent = null)
{
$this->user_agent = $user_agent;
}
// Подключение прокси (HTTPS/SOCKS5)
public function setProxy($proxy_ip, $proxy_type = '')
{
$this->proxy = $proxy_ip;
$this->proxy_type = $proxy_type;
}
// Временное имя дsя cookie файла
private function nameCookies($name = null)
{
for ($i=0; $i<10; ++$i)
$name .= chr(rand(97, 122));
return $name . '.temp';
}
// Создание cookie файла
public function setFileCookies()
{
$this->cookies = $this->nameCookies();
file_put_contents($this->cookies, "");
}
// Удаление cookie файла
public function clearCookies()
{
unlink($this->cookies);
}
private function exec()
{
curl_setopt($this->ch, CURLOPT_URL, $this->url);
curl_setopt($this->ch, CURLOPT_FOLLOWLOCATION , self::FOLLOWLOCATION);
curl_setopt($this->ch, CURLOPT_AUTOREFERER, self::AUTOREFERER);
curl_setopt($this->ch, CURLOPT_RETURNTRANSFER, self::RETURNTRANSFER);
curl_setopt($this->ch, CURLOPT_HEADER, true);
if ($this->postparams)
curl_setopt($this->ch, CURLOPT_POSTFIELDS, $this->postparams);
if (count($this->httpheaders))
curl_setopt($this->ch, CURLOPT_HTTPHEADER, $this->httpheaders);
if ($this->proxy)
curl_setopt($this->ch, CURLOPT_PROXY, $this->setProxyIp());
if ($this->proxy_type == 'socks5')
curl_setopt($this->ch, CURLOPT_PROXYTYPE, CURLPROXY_SOCKS5);
curl_setopt($this->ch, CURLOPT_TIMEOUT, self::TIMEOUT);
curl_setopt($this->ch, CURLOPT_CONNECTTIMEOUT, self::CONNECT_TIME);
curl_setopt($this->ch, CURLOPT_COOKIEJAR, $this->cookies); // Файл для записи cookies
curl_setopt($this->ch, CURLOPT_COOKIEFILE, $this->cookies); // Файл для чтения cookies
$response = curl_exec($this->ch);
$response = substr($response, curl_getinfo($this->ch, CURLINFO_HEADER_SIZE));
$this->postparams = null;
return $response;
}
public function __destruct()
{
curl_close($this->ch);
}
}
Answer the question
In order to leave comments, you need to log in
When instantiating a class, pass the proxy to the constructor.
public function __construct($proxy)
{
$this->ch = curl_init();
$this->proxy = $proxy;
}
$curl = new Curl('127.0.0.1');
$data = $curl->post('http://ya.ru');
$curl = new Curl();
$curl->setProxy('127.0.0.1');
$data1 = $curl->post('http://ya.ru');
$data2 = $curl->post('http://vk.com');
$data3 = $curl->post('http://google.com');
Didn't find what you were looking for?
Ask your questionAsk a Question
731 491 924 answers to any question