HTML не отображает правильное изображение при использовании настраиваемого cURL «прокси», но правильно показывает на нормальном веб-сайте, несмотря на то, что прокси работает правильно - PullRequest
0 голосов
/ 10 апреля 2019

Это изображение не отображается правильно. Ссылка является действительным изображением, полученным через cURL-прокси. Когда вы наводите указатель мыши на ссылку в инструментах разработчика Chrome, она отображает изображение. Когда вы заменяете ссылку на изображение на обычном веб-сайте, это работает. Но по какой-то причине, когда оно отображается на веб-сайте «прокси», это не так.

справочная информация: в настоящее время я пытаюсь написать собственный прокси-подобный скрипт на PHP, используя cURL и заменяя все возвращаемые ссылки ссылками «прокси». Я столкнулся с проблемой на одном из тестируемых веб-сайтов (https://www.memrise.com/).

Вот код прокси:

<?php
$proxy_url = "http://localhost/tunnel/get.php?url=http://";
$proxy_url_https = "http://localhost/tunnel/get.php?url=https://";
// Get cURL resource
$curl = curl_init();
// Set some options - we are passing in a useragent too here
curl_setopt_array($curl, array(
    CURLOPT_RETURNTRANSFER => 1,  // no idea
    CURLOPT_URL => $_GET['url'], // url
    CURLOPT_USERAGENT => $_SERVER['HTTP_USER_AGENT'], // user agent
    CURLOPT_FOLLOWLOCATION => true, // follows redirects

    CURLOPT_CONNECTTIMEOUT => 20 // times out for 404 type things

));

// Send the request & save response to $resp

if (!curl_errno($curl)) {
    $resp = curl_exec($curl);
    $info = curl_getinfo($curl, CURLINFO_CONTENT_TYPE);
    header('Content-Type: '.$info); // set correct content-type header
    $resp = str_replace("http://", $proxy_url, $resp); // replace http urls
    $resp = str_replace("https://", $proxy_url_https, $resp); // replace https urls
    $base = 'http://localhost/tunnel/get.php?url='.$_GET['url'];
    $resp = preg_replace('~(?:src|action|href)=[\'"]\K[^http]/?(?!/)[^\'"]*~',"$base$0",$resp); // replace relative paths with proxy ones. Example: <element src="stylesheet.css"> would change to <element src="https://proxy/website/stylesheet.css">
    $resp = preg_replace('/integrity="(.*)" /', "", $resp); // had some issues with integrity since i'm modifying the returned resources, so i just removed it lol
    echo $resp;

}

// Close request to clear up some resources
curl_close($curl);

прокси-сайт: https://puu.sh/DcwgF/9f7bbdade2.png

реальный сайт: https://puu.sh/Dcwi4/4cd3e28028.png

код прокси: https://puu.sh/DcwyO/93f0ea4b79.png

измененное изображение на реальном сайте: https://puu.sh/DcKgy/06dc36deaf.png

код прокси: https://puu.sh/DcKwU/6e3cebff77.php

сайт, на котором я тестировал: https://www.memrise.com/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...