Advertisement
Guest User

Untitled

a guest
Feb 25th, 2020
149
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 8.93 KB | None | 0 0
  1. <?php
  2. /**
  3. * Включает поддержку синтаксиса cURL, как в обычном PHP
  4. * становятся доступными curl_* функции
  5. *
  6. * Обязательно, чтоб функции были объявлены в корневом namespace
  7. */
  8.  
  9. namespace ;
  10.  
  11. use cURLFile,
  12. php\lib\Str,
  13. bundle\jurl\jURL,
  14. bundle\jurl\jURLFile,
  15. bundle\jurl\jURLException;
  16.  
  17. // Для autoloader'а
  18. class cURL{
  19.  
  20. }
  21.  
  22. // Пока define некорректно работает в jphp
  23. define('CURLINFO_HTTP_CODE', 'responseCode');
  24. define('CURLINFO_RESPONSE_CODE', 'responseCode');
  25. define('CURLINFO_TOTAL_TIME', 'executeTime');
  26. define('CURLINFO_SIZE_UPLOAD', 'requestLength');
  27. define('CURLINFO_SIZE_DOWNLOAD', 'responseLength');
  28. define('CURLINFO_CONTENT_TYPE', 'contentType');
  29.  
  30. if(!function_exists('curl_init')){
  31.  
  32. /**
  33. * --RU--
  34. * Инициализирует сеанс cURL
  35. * @param string $url (optional)
  36. */
  37. function curl_init($url = NULL){
  38. return new jURL($url);
  39. }
  40.  
  41. /**
  42. * --RU--
  43. * Устанавливает параметр для сеанса CURL
  44. * @param jURL $ch - Дескриптор cURL, полученный из curl_init
  45. * @param string $key - Устанавливаемый параметр CURLOPT_*
  46. * @param string $value - Значение параметра key
  47. */
  48. function curl_setopt(jURL $ch, $key, $value){
  49. $reKeys = [
  50. 'CURLOPT_URL' => 'url',
  51. 'CURLOPT_CONNECTTIMEOUT' => 'connectTimeout',
  52. 'CURLOPT_CONNECTTIMEOUT_MS' => 'connectTimeout',
  53. 'CURLOPT_TIMEOUT' => 'readTimeout',
  54. 'CURLOPT_TIMEOUT_MS' => 'readTimeout',
  55. 'CURLOPT_CUSTOMREQUEST' => 'requestMethod',
  56. 'CURLOPT_POSTFIELDS' => 'postData', // postFiles //
  57. 'CURLOPT_POST' => 'requestMethod',
  58. 'CURLOPT_PUT' => 'requestMethod',
  59. 'CURLOPT_GET' => 'requestMethod',
  60. 'CURLOPT_REFERER' => 'httpReferer',
  61. 'CURLOPT_AUTOREFERER' => 'autoReferer',
  62. 'CURLOPT_COOKIEFILE' => 'cookieFile',
  63. 'CURLOPT_COOKIEJAR' => 'cookieFile',
  64. 'CURLOPT_USERAGENT' => 'userAgent',
  65. 'CURLOPT_HEADER' => 'returnHeaders',
  66. 'CURLOPT_FOLLOWLOCATION' => 'followRedirects',
  67. 'CURLOPT_HTTPHEADER' => 'httpHeader',
  68. 'CURLOPT_USERPWD' => 'basicAuth',
  69. 'CURLOPT_PROXY' => 'proxy',
  70. 'CURLOPT_PROXYUSERPWD' => 'proxyAuth',
  71. 'CURLOPT_PROXYTYPE' => 'proxyType',
  72. 'CURLOPT_PROGRESSFUNCTION' => 'progressFunction',
  73. 'CURLOPT_FILE' => 'outputFile',
  74. 'CURLOPT_BUFFERSIZE' => 'bufferLength',
  75. 'CURLOPT_INFILE' => 'inputFile',
  76. 'CURLOPT_NOBODY' => 'returnBody',
  77. ];
  78.  
  79. $jKey = isset($reKeys[$key]) ? $reKeys[$key] : NULL;
  80.  
  81. if($key == 'CURLOPT_POST' and (bool)$value === true){
  82. $value = 'POST';
  83. }
  84. elseif($key == 'CURLOPT_NOBODY'){
  85. $value = !$value;
  86. }
  87. elseif($key == 'CURLOPT_GET' and (bool)$value === true){
  88. $value = 'GET';
  89. }
  90. elseif($key == 'CURLOPT_PUT' and (bool)$value === true){
  91. $value = 'PUT';
  92. }
  93. elseif($key == 'CURLOPT_HTTPHEADER'){
  94. $headers = [];
  95. foreach ($value as $h) {
  96. $t = Str::Split($h, ':', 2);
  97. $headers[] = [
  98. Str::Trim( $t[0] ),
  99. Str::Trim( $t[1] ),
  100. ];
  101. }
  102. $value = $headers;
  103. }
  104. elseif($key == 'CURLOPT_CONNECTTIMEOUT' OR $key == 'CURLOPT_TIMEOUT'){
  105. $value = $value * 1000;
  106. }
  107. elseif($key == 'CURLOPT_POSTFIELDS' AND is_array($value)){
  108. $str = [];
  109. $files = [];
  110.  
  111. foreach($value as $k=>$v){
  112. if($v instanceof jURLFile || Str::Sub($v, 0, 1) == '@'){
  113. $files[$k] = $v;
  114. }
  115. else $str[$k] = $v;
  116. }
  117. if(sizeof($files) > 0) $ch->setOpt('postFiles', $files);
  118. $value = $str;
  119. }
  120. elseif($key == 'CURLOPT_PROXYTYPE'){
  121. $proxyTypes = [
  122. 'CURLPROXY_HTTP' => 'HTTP',
  123. 'CURLPROXY_SOCKS5' => 'SOCKS'
  124. ];
  125. $value = (isset($proxyTypes[$value]) ? $proxyTypes[$value] : $value);
  126. }
  127.  
  128. $ch->setOpt($jKey, $value);
  129. }
  130.  
  131. /**
  132. * --RU--
  133. * Устанавливает несколько параметров для сеанса cURL
  134. * @param jURL $ch - Дескриптор cURL, полученный из curl_init
  135. * @param array $options - Массив c параметрами вида [CURLOPT_* => 'value']
  136. */
  137. function curl_setopt_array(jURL $ch, $options){
  138. foreach($options as $k=>$v){
  139. curl_setopt($ch, $k, $v);
  140. }
  141. }
  142.  
  143. /**
  144. * --RU--
  145. * Выполняет запрос cURL
  146. * @param jURL $ch - Дескриптор cURL, полученный из curl_init
  147. * @return mixed
  148. */
  149. function curl_exec(jURL $ch){
  150. try{
  151. return $ch->exec();
  152. } catch(jURLException $e){
  153. return false;
  154. }
  155. }
  156.  
  157. /**
  158. * --RU--
  159. * Выполняет запрос cURL асинхронно
  160. * @param jURL $ch - Дескриптор cURL, полученный из curl_init
  161. * @param callable $callback - Функция, куда бкдет передан результат запроса
  162. */
  163. function curl_exec_async(jURL $ch, $callback = null){
  164. try{
  165. $ch->aSyncExec($callback);
  166. } catch(jURLException $e){
  167. if(is_callable($callback)){
  168. $callback(false);
  169. }
  170. }
  171.  
  172. }
  173.  
  174. /**
  175. * --RU--
  176. * Возвращает строку с описанием последней ошибки текущего сеанса
  177. * @param jURL $ch - Дескриптор cURL, полученный из curl_init
  178. * @return string|null
  179. */
  180. function curl_error(jURL $ch){
  181. return ($ch->getError() === false) ? null : $ch->getError()['error'];
  182. }
  183.  
  184. /**
  185. * --RU--
  186. * Возвращает код последней ошибки
  187. * @param jURL $ch - Дескриптор cURL, полученный из curl_init
  188. * @return int - Код ошибки или 0, если запрос выполнен без ошибок
  189. */
  190. function curl_errno(jURL $ch){
  191. return ($ch->getError() === false) ? 0 : $ch->getError()['code'];
  192. }
  193.  
  194. /**
  195. * --RU--
  196. * Возвращает информацию об определенной операции
  197. * @param jURL $ch - Дескриптор cURL, полученный из curl_init
  198. * @return array
  199. */
  200. function curl_getinfo(jURL $ch, $opt = null){
  201. $info = $ch->getConnectionInfo();
  202. return (!is_null($opt) and isset($info[$opt])) ? $info[$opt] : $info;
  203. }
  204.  
  205. /**
  206. * --RU--
  207. * Завершает сеанс cURL
  208. * @param jURL $ch - Дескриптор cURL, полученный из curl_init
  209. */
  210. function curl_close(jURL $ch){
  211. return $ch->close();
  212. }
  213.  
  214. /**
  215. * --RU--
  216. * Сбросить параметры текущего сеанса
  217. */
  218. function curl_reset(jURL $ch){
  219. return $ch->reset();
  220. }
  221.  
  222.  
  223. /**
  224. * --RU--
  225. * Создает объект cURLFile
  226. * @param string $filename Path to the file which will be uploaded.
  227. * @param string $mimetype = NULL
  228. * @param string $postname = NULL
  229. */
  230. function curl_file_create($filename, $mimetype = NULL, $postname = NULL){
  231. return new jURLFile($filename, $mimetype, $postname);
  232. }
  233. }
  234.  
  235. if(!function_exists('http_build_query')){
  236. function http_build_query($a,$b='',$c=0){
  237. if (!is_array($a)) return $a;
  238.  
  239. foreach ($a as $k=>$v){
  240. if($c){
  241. if( is_numeric($k) ){
  242. $k=$b."[]";
  243. }
  244. else{
  245. $k=$b."[$k]";
  246. }
  247. }
  248. else{
  249. if (is_int($k)){
  250. $k=$b.$k;
  251. }
  252. }
  253. if (is_array($v)||is_object($v)){
  254. $r[] = http_build_query($v,$k,1);
  255. continue;
  256. }
  257. $r[] = urlencode($k) . "=" . urlencode($v);
  258. }
  259. return implode("&",$r);
  260. }
  261. }
  262.  
  263. if(!function_exists('parse_str')){
  264. function parse_str($str) {
  265. $arr = array();
  266. $pairs = explode('&', $str);
  267.  
  268. foreach ($pairs as $i) {
  269. list($name,$value) = explode('=', $i, 2);
  270.  
  271. if( isset($arr[$name]) ) {
  272. if( is_array($arr[$name]) ) {
  273. $arr[$name][] = $value;
  274. }
  275. else {
  276. $arr[$name] = array($arr[$name], $value);
  277. }
  278. }
  279. else {
  280. $arr[$name] = $value;
  281. }
  282. }
  283. return $arr;
  284. }
  285. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement