Ответы пользователя по тегу Веб-разработка
  • Как переделать CURL запрос под PHP?

    glebovgin
    @glebovgin
    Full Stack Web Developer
    Добрый день.

    Да, ваш код надо бы поправить:
    $post  = array('key' => 'value'); // укажите данные для отправки через POST
    $headers = array('Content-Type: application/json', 'Authorization: Token 123', 'X-Secret: 123');
    
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
    curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); // отправка заголовков
    curl_setopt($ch, CURLOPT_POST, true);
    curl_setopt($ch, CURLOPT_POSTFIELDS, $post); // POST-данные
    curl_setopt($ch, CURLOPT_URL, 'https://dadata.ru/api/v2/clean/phone');
    $result = curl_exec($ch);  
    curl_close($ch);
    echo $result;


    Не стесняйтесь адаптировать код под свои конкретные нужды. Я просто указал вектор.
    Ответ написан
    2 комментария
  • Как убрать Deprecated в данном случае?

    glebovgin
    @glebovgin
    Full Stack Web Developer
    У меня эта задача прекрасно решилась так:

    $file  = '/path/to/file.ext';
    $mime_type = 'application/x-shockwave-flash'; // подставить нужный mime
    $curl_file = new CURLFile($file, $mime_type, basename($file));
    $post['file'] = $curl_file;
    
    $curl = curl_init();
    curl_setopt($curl, CURLOPT_URL, $post_url); // $post_url подставить свой
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); 
    curl_setopt($curl, CURLOPT_POST, true); 
    curl_setopt($curl, CURLOPT_POSTFIELDS, $post);
    curl_setopt($curl, CURLOPT_HEADER, FALSE);
    curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true);
    $result = curl_exec($curl); 
    curl_close($curl);
    Ответ написан
    Комментировать
  • Как избавится от 301 Moved Permanently при работе с cURL?

    glebovgin
    @glebovgin
    Full Stack Web Developer
    Отправляйте запрос на тот же урл со слешем в конце
    www.yell.ru/moscow/com/mosvet-mosvet-veterinarnaya.../
    Ответ написан
    4 комментария
  • Авторизация на instagram через curl, как?

    glebovgin
    @glebovgin
    Full Stack Web Developer
    У меня не столько готовый ответ, сколько некоторые соображения:

    1. Отправляйте запрос сразу на https://www.instagram.com/accounts/login/, чтобы не было 301 редиректа. Да, у вас стоит FOLLOWLOCATION, но это я так, на всякий случай.
    2. Вообще непонятен смысл вот этого file_put_contents("insta_cookie.txt", $result_auth."\n", FILE_APPEND)
    Используйте
    CURLOPT_COOKIEFILE, "insta_cookie.txt"
    СURLOPT_COOKIEJAR, "insta_cookie.txt"
    3. Посмотрите подробнее $info = curl_getinfo($ch1); - что там есть из полезного.
    UPD. 4. И еще: curl_setopt($ch1, CURLOPT_ENCODING , "gzip");
    А вообще, в случае с Instagram, я бы использовал какой-то headless браузер, например CasperJS, потому как с php+curl вы, возможно, дольше промучаетесь.
    Ответ написан
  • Как скачать страницу без обновления с помощью curl?

    glebovgin
    @glebovgin
    Full Stack Web Developer
    Можете попробовать на www.telderi.ru/ru/search отправлять POST-запрос с кучей данных (эмуляция AJAX-запроса):
    page:0
    user_id:
    website_type[0]:website
    price[from]:
    price[to]:
    price_optimal[from]:
    price_optimal[to]:
    price_bliz[from]:
    price_bliz[to]:
    revenue[total][from]:
    revenue[total][to]:
    // и т.д.

    Подсмотреть полный список можете в Firebug или Chrome DevTool во вкладке Network.
    В ответ придет огромный html кусок, который уже отсортирован. Его и можете парсить.

    Это если в лоб.
    Ответ написан
  • Curl создает разные PHPSESSID так и должно быть?

    glebovgin
    @glebovgin
    Full Stack Web Developer
    Конечно, PHPSESSID генерируется для каждого юзера отдельно. Вы не можете скопировать из Chrome эту переменную и передать ее в curl. Для curl-соединения будет свое значение. Капчу вам надо распознавать либо вручную (если простая), либо через автоматизированные сервисы за деньги.
    Ответ написан
    Комментировать
  • Как правильно вывести подписчиков instagam с помощью curl?

    glebovgin
    @glebovgin
    Full Stack Web Developer
    Добрый день.
    Вы в браузере переходите по указанному URL и видите результат, потому что вы авторизованы в Инстаграмме, то есть у вас уже выставлены в браузере нужные cookie. А curl не имеет никаких cookie, поэтому вы получаете пустой результат. Вам надо либо подставить куки и передать их в curl, либо авторизоваться в инстаграмме через curl и все равно сохранить куки.
    Чтобы проверить мою версию, просто откройте свой URL в каком-нибудь другом браузере и вы получите пустой json.
    Ответ написан
    3 комментария
  • CURL, как сайт донор может еще узнать обо мне?

    glebovgin
    @glebovgin
    Full Stack Web Developer
    День добрый.

    1. Сменить сервер (или проще IP), раз уж с другого сервера работает без проблем
    2. Парсить с помощью CasperJS или PhantomJS.
    Ответ написан
  • Как в php задавать несколько значений для функции glob?

    glebovgin
    @glebovgin
    Full Stack Web Developer
    Вторым параметром можно передать GLOB_BRACE, что позволит более гибко фильтровать. Подробнее в документации.
    foreach (glob("mailfile/*{Стрекоза,стрекозка}*.*", GLOB_BRACE) as $filename) {
      //
    }
    Ответ написан
    3 комментария
  • Какое регулярное выражение в php использовать?

    glebovgin
    @glebovgin
    Full Stack Web Developer
    День добрый.

    Как по мне, так вот что может сработать:
    preg_replace('/Subject\(.*\)_/i', '', $str); // где $str - имя файла
    Ответ написан
    3 комментария
  • 2 домена, один зеркало, как лучше связать?

    glebovgin
    @glebovgin
    Full Stack Web Developer
    Если вы хотите, чтобы на двух доменах показывался один и тот же контент, то условно DocumentRoot для обоих доменов должен быть один и тот же.
    domain-2.com должен быть ServerAlias для domain.com и никаких редиректов в htaccess писать не надо.
    Ответ написан
    Комментировать
  • Curl и вечная обновление страницы?

    glebovgin
    @glebovgin
    Full Stack Web Developer
    Дело в том, что в $content есть какой-то js-код, который в браузере после echo исполняется и отсюда редиректы.
    Ответ написан
    Комментировать
  • Как реализовать автоприкрипление файлов на сайт?

    glebovgin
    @glebovgin
    Full Stack Web Developer
    Вечер добрый.
    На помощь приходит отличная функция scandir

    $path = '/path/to/dir/';
    $files = array_diff(scandir($path), array('.', '..'));
    var_dump($files);

    $files - массив с именами каждого файла в папке.
    Ответ написан
  • Как спарсить заголовки с inbound.org?

    glebovgin
    @glebovgin
    Full Stack Web Developer
    Запрос идёт на https://api.inbound.org/channels/default/new/30?page=1 . В ответе получаете json.
    Но, там есть еще GET-параметр token и я бы, конечно, тоже его генерировал и отправлял. Этот token получается в результате
    encodeURIComponent(t("inbound6session"))
    , с чем вам и надо разобраться.
    Сейчас это все находится в файле https://inbound.org/assets/js/dist/app-21a71a3e87.... и он обфусцирован, но при желании разобраться можно. Ищите по файлу "apiBaseURL" и рядом найдете всё остальное.
    Ответ написан
    Комментировать
  • Как пофиксить белый экран на самописной cms?

    glebovgin
    @glebovgin
    Full Stack Web Developer
    Есть в PHP крайне полезная функция register_shutdown_function(), которая поможет разобраться с ошибками. Но не забывайте, что сообщения об ошибках должны видеть только вы, а не все подряд при заходе на сайт. Вот пример:

    <?
    register_shutdown_function( "fatal_handler" );
    
    function fatal_handler() {
    	$errfile = "unknown file";
    	$errstr  = "shutdown";
    	$errno   = E_CORE_ERROR;
    	$errline = 0;
    	
    	$error = error_get_last();
    	
    	if( $error !== NULL) {
    		$errno   = $error["type"];
    		$errfile = $error["file"];
    		$errline = $error["line"];
    		$errstr  = $error["message"];
    		
    		echo format_error( $errno, $errstr, $errfile, $errline);
    	}
    }
    
    function format_error( $errno, $errstr, $errfile, $errline ) {
    	$trace = print_r( debug_backtrace( false ), true );
    	
    	$content = '<table style="background-color: #FFFFFF;margin: 0 auto;">
    	<thead><th style="width: 100px;">Item</th><th>Description</th></thead>
    	<tbody>
    	<tr>
    	<th>Error</th>
    	<td><pre>'.$errstr.'</pre></td>
    	</tr>
    	<tr>
    	<th>Errno</th>
    	<td><pre>'.$errno.'</pre></td>
    	</tr>
    	<tr>
    	<th>File</th>
    	<td>'.$errfile.'</td>
    	</tr>
    	<tr>
    	<th>Line</th>
    	<td>'.$errline.'</td>
    	</tr>
    	<tr>
    	<th>Trace</th>
    	<td><pre>'.$trace.'</pre></td>
    	</tr>
    	</tbody>
    	</table>';
    	
    	return $content;
    }


    Это самый простой вариант использования. Добавьте этот код в общий для всей CMS файл и в случае ошибки увидите подробный отчет о проблеме вместо пустого экрана. И не стесняйтесь допилить код под собственные нужды.

    п.с. если хотите это обернуть в класс, то вот каркас

    class PHPFatalError 
    {
    	public function set_handler() {
    		register_shutdown_function(array($this, 'handle_shutdown'));
    	}
    	
    	public function handle_shutdown() {
    		if (($error = error_get_last())) {
    			// echo сообщения о деталях ошибки
    		}
    	}
    }
    Ответ написан
    Комментировать
  • Как через xpath добраться до середины текста на php?

    glebovgin
    @glebovgin
    Full Stack Web Developer
    Так вы же почти все сами сделали. Чтобы не брать те абзацы, что внутри blockquote, надо ваш же xpath немного преобразовать:
    //p[position() = floor(last() div 2 + 0.5) or position() = ceiling(last() div 2 + 0.5)][not(parent::blockquote)]
    Ответ написан
    2 комментария
  • Как правильно парсить Яндекс Блоги (blogs.yandex.ru), используя прокси?

    glebovgin
    @glebovgin
    Full Stack Web Developer
    День добрый.

    1. Прокси прокси рознь. Одни шустры и беспроблемны, другие утром работают, вечером нет. Конечно же, время ответа у каждого свое. Можно просто при таймауте выше 5-7 сек переключаться на другой прокси.
    2. Имхо, только эмпирическим путем это надо определять.
    3. Скажу по своему только опыту - с общедоступными мороки больше. Я покупал списки прокси. Но и их покупка не избавляет от проблем - те же задержки, какие-то могут не работать вообще. В общем прокси - не всегда панацея.
    Ответ написан
    Комментировать
  • Запрос XPath без дочерних элементов?

    glebovgin
    @glebovgin
    Full Stack Web Developer
    Если структура html одинакова, то сработает такой вариант
    //div[contains(@class, "some-class")]/div/span[1]/following-sibling::text()

    А вот такой вариант
    //div[contains(@class, "some-class")]/div/text()[normalize-space()]

    выберет все текстовые элементы, исключая пробелы. В конкретно вашем случае в item(0)->nodeValue будет значение между двумя span. Если нужны все текстовые элементу внутри div, то просто пройти foreach по результатам.
    Ответ написан
    2 комментария