function mainPage(MultiRequest_Request $request, MultiRequest_Handler $handler) { $headers = $request->getResponseHeaders(); $cookies = $request->getRespopnseCookies(); $request = new MultiRequest_Request('https://banweb.banner.vt.edu/ssb/prod/twbkwbis.P_GenMenu?name=bmenu.P_MainMnu'); $request->setCookiesStorage(COOKIE_FILE); $headers = array($headers[5], $headers[6], $headers[7]); $headers[] = 'Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5'; $headers[] = 'Cache-Control: no-cache'; $headers[] = 'Connection: Keep-Alive'; $headers[] = 'Keep-Alive: 300'; $headers[] = 'Accept-Charset: UTF-8,Windows-1251,ISO-8859-1;q=0.7,*;q=0.7'; $headers[] = 'Accept-Language: ru,en-us,en;q=0.5'; $headers[] = 'Pragma:'; $request->addHeaders($headers); $handler->pushRequestToQueue($request); $request->onComplete(function (MultiRequest_Request $request, MultiRequest_Handler $handler) { try { $request->getFailException(); } catch (Exception $e) { exit($e->getMessage()); } // echo '<pre>'; // var_dump($request->getResponseHeaders()); // exit; // echo '<pre>'; var_dump($request->getContent()); exit; }); }
function saveCompleteRequestToFile(MultiRequest_Request $request, MultiRequest_Handler $handler) { $filename = preg_replace('/[^\\w\\.]/', '', $request->getUrl()); file_put_contents($this->temp_folder . "xml-{$request->dws_id}.xml", $request->getContent()); $xml = simplexml_load_string($request->getContent()); $active_cats = array(); foreach ($xml->row as $row) { $data = array(); $product_group = $this->fixRecord($row->product_group); $cat_arr = str_split($product_group, 2); $data['stockid'] = $this->fixRecord($row->stockid); $data['stock_code'] = $this->fixRecord($row->part); $data['product_group'] = $product_group; $data['cat_1'] = isset($cat_arr[0]) ? $cat_arr[0] : ''; $data['cat_2'] = isset($cat_arr[0]) && isset($cat_arr[1]) ? $cat_arr[0] . $cat_arr[1] : ''; $data['cat_3'] = isset($cat_arr[0]) && isset($cat_arr[1]) && isset($cat_arr[2]) ? $cat_arr[0] . $cat_arr[1] . $cat_arr[2] : ''; $data['product_name'] = $this->fixRecord($row->desc1); $data['product_alias'] = $this->fixRecord($row->part); $data['unit_size'] = $this->fixRecord($row->duoi); $data['qty_units_per_case'] = $this->fixRecord($row->uoi); $data['retail_price'] = $this->fixRecord($row->retail_price); $data['por'] = 0; $data['cost_price'] = $this->fixRecord($row->cost); $data['list_price'] = $this->fixRecord($row->list_price); $data['carriage_charge'] = $this->fixRecord($row->carriage_charge); $data['collect_price_offer'] = 0; $data['delivery_price'] = $this->fixRecord($row->list_price); $data['delivery_price_offer'] = 0; $data['collect_club_price'] = 0; $data['delivery_club_price'] = 0; $data['vat_id'] = $this->fixRecord($row->vat); $data['qty_hand'] = $this->fixRecord($row->qty_hand); $data['qty_aloc'] = $this->fixRecord($row->qty_aloc); $data['product_weight'] = $this->fixRecord($row->weight); $data['abv_percent'] = $this->fixRecord($row->wines_abv); $data['web_image'] = $this->fixRecord($row->web_image); $data['flag_offers'] = $this->fixRecord($row->flag_offers); $data['product_meta_desc'] = ''; $data['product_meta_keywords'] = ''; $data['product_is_active'] = 1; $data['product_added_on'] = 1; $status = $this->CI->db->insert('product', $data); if ($status) { $active_cats[] = $data['cat_1']; $active_cats[] = $data['cat_2']; $active_cats[] = $data['cat_3']; } } $active_cats = array_unique($active_cats); foreach ($active_cats as $cat_code) { if ($cat_code == '') { continue; } $update = array(); $update['category_is_active'] = 1; $this->CI->db->where('category_code', $cat_code); $this->CI->db->update('category', $update); } }
public function request(MultiRequest_Request $request) { if ($this->requestsDelay) { sleep($this->requestsDelay); } $request->onComplete(array($this, 'notifyRequestIsComplete')); $this->requestsDefaults->applyToRequest($request); $request->setCookiesStorage($this->cookiesFilepath); if ($this->enableAutoReferer && $this->lastRequest) { $request->setCurlOption(CURLOPT_REFERER, $this->lastRequest->getUrl()); } $this->mrHandler->pushRequestToQueue($request); if ($this->enableAutoStart) { $this->mrHandler->start(); } }
public function add($urls) { $urls = (array) $urls; foreach ($urls as $url) { $request = new MultiRequest_Request($url); if ($this->range) { $domain = parse_url($url, PHP_URL_HOST); if (!empty($domain)) { $domain = preg_replace('/^www\\./i', '', $domain); if (!in_array($domain, $this->norange_domains)) { $request->setCurlOption(CURLOPT_RANGE, $this->range); } } } $this->worker->pushRequestToQueue($request); } return $this; }
public function start() { if ($this->isActive || $this->isStopped) { return; } $this->isActive = true; $this->isStarted = true; try { $this->mcurlHandle = $mcurlHandle = curl_multi_init(); do { // send requests from queue to CURL if (count($this->activeRequests) < $this->connectionsLimit) { for ($i = $this->connectionsLimit - count($this->activeRequests); $i > 0; $i--) { $request = $this->queue->pop(); if ($request) { $this->sendRequestToMultiCurl($mcurlHandle, $request); $this->activeRequests[$request->getId()] = $request; } else { break; } } } while (CURLM_CALL_MULTI_PERFORM === curl_multi_exec($mcurlHandle, $activeThreads)) { } // check complete requests curl_multi_select($mcurlHandle, $this->requestingDelay); while ($completeCurlInfo = curl_multi_info_read($mcurlHandle)) { $completeRequestId = MultiRequest_Request::getRequestIdByCurlHandle($completeCurlInfo['handle']); $completeRequest = $this->activeRequests[$completeRequestId]; unset($this->activeRequests[$completeRequestId]); curl_multi_remove_handle($mcurlHandle, $completeRequest->getCurlHandle()); $completeRequest->initResponseDataFromHandler($this); // check if response code is 301 or 302 and follow location $ignoreNotification = false; $completeRequestCode = $completeRequest->getCode(); if ($completeRequestCode == 301 || $completeRequestCode == 302) { $completeRequestOptions = $completeRequest->getCurlOptions(); if (!empty($completeRequestOptions[CURLOPT_FOLLOWLOCATION])) { $completeRequest->_permanentlyMoved = empty($completeRequest->_permanentlyMoved) ? 1 : $completeRequest->_permanentlyMoved + 1; $responseHeaders = $completeRequest->getResponseHeaders(true); if ($completeRequest->_permanentlyMoved < 5 && !empty($responseHeaders['Location'])) { $completeRequest->setUrl($completeRequest->getBaseUrl() . $responseHeaders['Location']); $completeRequest->reinitCurlHandle(); $this->pushRequestToQueue($completeRequest); $ignoreNotification = true; } } } if (!$ignoreNotification) { $this->notifyRequestComplete($completeRequest); } } } while (!$this->isStopped && ($this->activeRequests || $this->queue->count())); } catch (Exception $exception) { } $this->isActive = false; if ($mcurlHandle && is_resource($mcurlHandle)) { curl_multi_close($mcurlHandle); } if (!empty($exception)) { throw $exception; } $this->callbacks->onComplete($this); }
function saveCompleteRequestToFile(MultiRequest_Request $request, MultiRequest_Handler $handler) { $filename = preg_replace('/[^\\w\\.]/', '', $request->getUrl()); file_put_contents(DOWNLOADS_DIR . DIRECTORY_SEPARATOR . $filename, $request->getContent()); }