Пример #1
0
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;
    });
}
Пример #2
0
 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);
     }
 }
Пример #3
0
 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();
     }
 }
Пример #4
0
 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;
 }
Пример #5
0
 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);
 }
Пример #6
0
function saveCompleteRequestToFile(MultiRequest_Request $request, MultiRequest_Handler $handler)
{
    $filename = preg_replace('/[^\\w\\.]/', '', $request->getUrl());
    file_put_contents(DOWNLOADS_DIR . DIRECTORY_SEPARATOR . $filename, $request->getContent());
}