Skrypt dziala ok tylko gdy pobieram www mobilną z file_get_contents.

0

Hej :)

Dawno nie pisałem i nie udzielam się aktywnie oraz nie moderuje. Bo stracie Bliskiej Osoby, rzuceniu się w wir pracy, a także poznaniu w końcu super Kobiety czas mi zajmują inne sprawy. Ale czasami znajdę też chwilę na kodowanie. A że w PHP jestem kompletnym amatorem i bazuje na kopiuj / wklej z działających kodów i kiedy się da posiłkuję Forum StackOverFlow to mam kolejny problem, którego nie umiem ogarnąć. Mam skrypt ktory raczej zainteresowanej osobie mogę pokazać na PM ze względu iż chodzi tutaj o przetwarzanie strony dla dorosłych. Ale skrypt działa ogólnie tak jak chce. Pomijam napisanie go ze sztuką jak na produkcje.

Problem jednak jest w tym że do pobierania na ogół używam poniższego kodu w wielu projektach. Czasami zmieniam wersję protokołu z 1.1 na 1.0. I jak widzę pod HttpAnalyzerStdV7 i w przypadku tego kodu też wszystko jest ok i serwer mobilny z "m. " w adresie zwraca mi takie dane jak Fire Foxowi i nawet nagłówki uzupełniłem tak samo. Ale niestety po pobraniu strony interpreter PHP używany pod Windows "wisi" bo skrypt ma działać z linii komend wraz z parametrem. Ale kiedy żądana strona pobierana jest z użyciem file_get_contents skrypt idzie sprawnie. Danie jako komentarz w kodzie linii error_reporting(0);` i tak nie powoduje pokazywania mi na konsoli jakichkolwiek ostrzeżeń czy błędów. Prosił bym o podpowiedź co może być nie tak? Lub czy może namieszałem coś w tej funkcji. Ale wolał bym odpytywać serwer czymś dopracowanym chociaż na ogół nikt nie analizuje a może nawet nie loguje dokładnych nagłówków wszelkich zapytań do www.

Przepraszam za rozpisanie się. Jeśli ktoś ma ochotę to mogę podzielić się skryptem na PM. Może jest jakiś trywialny błąd, ale ta funkcja działa gdzie indziej dla stron niemobilnych. I to nie wina raczej składni czy serwera bo po zmianie $webcontent = DoGetRequest($url); na $webcontent = file_get_contents($url); wszystko działa. Sorry za rozpisanie się - jak to ja :)

<?php
//...
$http_version = 1.1;
$an_useragent = 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:51.0) Gecko/20100101 Firefox/51.0';

//...

function DoGetRequest($url, $optua = '', $optrefurl = '', $optcookies = '', $returncookies = false)
{
    global $an_useragent;
    global $http_version;
    if ($optua != '') {
        $uavalue = $optua;
    } else {
        $uavalue = $an_useragent;
    }
    if ($optrefurl == '') {
        $optrefurl = '';
    } else {
        $optrefurl = 'Referer: ' . $optrefurl . "\r\n";
    }
    if ($optcookies == '') {
        $optcookies = '';
    } else {
        $optcookies = 'Cookie: ' . $optcookies . "\r\n";
    }
    $params   = array(
        'http' => array(
            'method' => 'GET',
            'protocol_version' => $http_version,
            'header' => 'User-Agent: ' . $uavalue . "\r\n" . $optrefurl . 'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8' . "\r\n" . 'Accept-Language: pl-PL,pl;q=0.9,en;q=0.8' . "\r\n" . $optcookies . 'Connection: keep-alive' . "\r\n" . 'Upgrade-Insecure-Requests: 1' . "\r\n"
        )
    );
    $ctx      = stream_context_create($params);
    $fp       = fopen($url, 'rb', false, $ctx);
    $response = stream_get_contents($fp);
    $cookies  = '';
    for ($i = 0; $i < count($http_response_header); $i++) {
        if (preg_match('@cookie.+?@i', $http_response_header[$i])) {
            $cookies = $cookies . $http_response_header[$i] . ';';
        }
    }
    if (!$returncookies) {
        return $response;
    } else {
        return $cookies . "\r\n" . $response;
    }
}

//...
?>
0

Ok, problem rozwiązany i tak potrzebuje niemobilnej wersji strony. A chyba zwiecha była przez to że adres wyłuskany z treści pobranej strony dalszych plików nie miał dopisanego z przoedu protokołu HTTP i może dlatego kod głupial. Poprawiłem wszystko i działa tak, jak chciałem. Jednak pytanie czy powyższy kod jest prawidłowy, coś można zrobić lepiej by zrobić HTTP GET z tymi nagłowkami?

1 użytkowników online, w tym zalogowanych: 0, gości: 1