239 lines
5.2 KiB
PHP
239 lines
5.2 KiB
PHP
<?php
|
|
|
|
class MfCurl {
|
|
|
|
const COOKIE = 'cookie.dat';
|
|
|
|
private $headers;
|
|
private $userAgent;
|
|
private $cookieFile;
|
|
private $proxy;
|
|
private $userName;
|
|
private $password;
|
|
|
|
private $options;
|
|
|
|
private $lastRequest;
|
|
private $lastRequestMethod;
|
|
private $lastResponse;
|
|
|
|
public function __construct($cookies=false,$proxy='',$timeout=30) {
|
|
$this->headers[] = 'Connection: Keep-Alive';
|
|
$this->headers[] = 'Content-type: application/x-www-form-urlencoded;charset=UTF-8';
|
|
$this->userAgent = 'MFFramework MFCurl';
|
|
|
|
$this->options = array();
|
|
|
|
$this->proxy = $proxy;
|
|
|
|
if (is_string($cookies)) {
|
|
$this->cookieFile = $cookies;
|
|
$cookies = true;
|
|
}
|
|
|
|
if ($cookies === true) {
|
|
$this->cookies = true;
|
|
$this->SetCookie($this->cookieFile);
|
|
} else {
|
|
$this->cookies = false;
|
|
}
|
|
|
|
$this->ch = curl_init();
|
|
|
|
$options = array(
|
|
// CURLOPT_HTTPHEADER => $this->headers,
|
|
CURLOPT_USERAGENT => $this->userAgent,
|
|
CURLOPT_HEADER => false,
|
|
CURLOPT_RETURNTRANSFER => true,
|
|
CURLOPT_FOLLOWLOCATION => true
|
|
);
|
|
|
|
if ($this->getUserName() != '' && $this->getPassword() != '') {
|
|
$options[CURLOPT_USERPWD] = $this->getUserName() . ":" . $this->getPassword();
|
|
}
|
|
|
|
if ($timeout) {
|
|
$options[CURLOPT_TIMEOUT] = $timeout;
|
|
}
|
|
|
|
if ($this->cookies == true) {
|
|
$options[CURLOPT_COOKIEFILE] = $this->cookieFile;
|
|
$options[CURLOPT_COOKIEJAR] = $this->cookieFile;
|
|
}
|
|
|
|
if ($this->proxy && is_array($this->proxy)) {
|
|
$options[CURLOPT_PROXY] = $this->proxy['ip'] . ':' . $this->proxy['port'];
|
|
}
|
|
|
|
$this->SetOption($options);
|
|
}
|
|
|
|
public function __destruct() {
|
|
curl_close($this->ch);
|
|
}
|
|
|
|
public function SetUrl($url) {
|
|
$this->SetOption(CURLOPT_URL, $url);
|
|
}
|
|
|
|
/**
|
|
* Ustawia opcje. Aby ustawiæ wiêcej ni¿ 1 opcje nale¿y do name
|
|
* podaæ tablice indexowan± nazwami opcji (definicjami) o warto¶ciach jakie
|
|
* chcemy ustawiæ.
|
|
*
|
|
* @param <string/array> $name
|
|
* @param <mixed> $value
|
|
*/
|
|
public function SetOption($name, $value = null) {
|
|
if (is_array($name)) {
|
|
foreach ($name as $k => $v) {
|
|
$this->options[$k] = $v;
|
|
}
|
|
} else {
|
|
$this->options[$name] = $value;
|
|
}
|
|
}
|
|
|
|
public function GetOption($name) {
|
|
if (array_key_exists($name, $this->options)) {
|
|
return $this->options[$name];
|
|
} else {
|
|
return null;
|
|
}
|
|
}
|
|
|
|
public function DelOption($name) {
|
|
if (array_key_exists($name, $this->options)) {
|
|
unset($this->options[$name]);
|
|
}
|
|
}
|
|
|
|
public function GetInfo($name) {
|
|
return curl_getinfo($this->ch, $name);
|
|
}
|
|
|
|
public function GetLastRequest() {
|
|
return $this->lastRequest;
|
|
}
|
|
|
|
public function GetLastRequestMethod() {
|
|
return $this->lastRequestMethod;
|
|
}
|
|
|
|
public function GetLastResponse() {
|
|
return $this->lastResponse;
|
|
}
|
|
|
|
public function GetUserName() {
|
|
return $this->userName;
|
|
}
|
|
|
|
public function SetUserName($userName) {
|
|
$this->userName = $userName;
|
|
}
|
|
|
|
public function GetPassword() {
|
|
return $this->password;
|
|
}
|
|
|
|
public function SetPassword($password) {
|
|
$this->password = $password;
|
|
}
|
|
|
|
public function SetCookie($cookieFile) {
|
|
if (file_exists($cookieFile)) {
|
|
$this->cookieFile=$cookieFile;
|
|
} else {
|
|
$fh = fopen($cookieFile,'w') or $this->RaiseError('The cookie file could not be opened. Make sure this directory has the correct permissions');
|
|
$this->cookieFile=$cookieFile;
|
|
fclose($fh);
|
|
}
|
|
}
|
|
|
|
public function Exec($url, $method, $data = null) {
|
|
$method = strtolower($method);
|
|
|
|
$this->SetUrl($url);
|
|
|
|
$this->lastRequest = $url;
|
|
$this->lastRequestMethod = $method;
|
|
|
|
if (preg_match('/^(https)/', $url)) {
|
|
$this->SetOption(CURLOPT_SSL_VERIFYPEER, false);
|
|
}
|
|
|
|
if($this->getUserName()!='' && $this->getPassword()!='') {
|
|
$this->SetOption(CURLOPT_USERPWD, $this->getUserName() . ":" . $this->getPassword());
|
|
}
|
|
|
|
switch ($method) {
|
|
case 'get':
|
|
$header = false;
|
|
break;
|
|
case 'post':
|
|
$this->SetOption(CURLOPT_POST, true);
|
|
$header = true;
|
|
break;
|
|
default:
|
|
$this->SetOption(CURLOPT_CUSTOMREQUEST, $method);
|
|
$header = true;
|
|
break;
|
|
}
|
|
|
|
if (!array_key_exists(CURLOPT_HEADER, $this->options)) {
|
|
$this->SetOption(CURLOPT_HEADER, $header);
|
|
}
|
|
|
|
if ($data !== null) {
|
|
$this->SetOption(CURLOPT_POSTFIELDS, $data);
|
|
}
|
|
|
|
curl_setopt_array($this->ch, $this->options);
|
|
|
|
$response = curl_exec($this->ch);
|
|
$this->lastResponse = $response;
|
|
|
|
if (!$response) {
|
|
throw new MfCurl_Exception('No response', 500);
|
|
}
|
|
|
|
if ($this->GetOption(CURLOPT_HEADER)) {
|
|
|
|
$headerSize = $this->GetInfo(CURLINFO_HEADER_SIZE);
|
|
|
|
$headers = substr($response, 0, $headerSize -4);
|
|
$body = substr($response, $headerSize);
|
|
|
|
$statusCode = array();
|
|
|
|
preg_match_all('/(HTTP(.*) ([1-5][0-9]{2}) ([^\n\r]*)){1,10}/', $headers, $ret);
|
|
|
|
$responseCode = (int)$ret[3][sizeof($ret[3])-1];
|
|
$responseMsg = $ret[4][sizeof($ret[4])-1];
|
|
|
|
if ($responseCode >= 100 && $responseCode < 300) {
|
|
return new MfCurl_Response($body, $responseCode, $responseMsg);
|
|
} else {
|
|
throw new MfCurl_Exception($responseMsg, $responseCode);
|
|
}
|
|
} else {
|
|
return MfCurl_Response($response);
|
|
}
|
|
}
|
|
|
|
public function Get($url) {
|
|
return $this->Exec($url, 'get');
|
|
}
|
|
|
|
public function Post($url, $data) {
|
|
return $this->Exec($url, 'post', $data);
|
|
}
|
|
|
|
|
|
public function RaiseError($error) {
|
|
throw new ApiException($error);
|
|
}
|
|
}
|
|
|
|
|
|
?>
|