Используя веб-прокси-сервис, чтобы получить содержимое html целевого URL-адреса?

В С# или еще VB.Net мне нужно получить доступ к веб-странице через веб-прокси-сервис, чтобы сделать веб-утилиту на целевом URL-адресе, который я меня интересует.

В качестве примера можно привести случайную службу веб-прокси (действительно, независимо от того, какой из них я открыт для предложений), например, это ниже, что не усложняет такие вещи, как другие, с хэшами в запросе (что вещь, которая Я не знаю, как обращаться):

http://proxyanonimo.es/browse.php?u=http%3a%2f%2furl.com

Затем, когда я выполняю HttpWebRequest к этому URL-адресу, я ожидал встретить в ответе целевой URL-адрес html, но вместо этого получаю этот контент:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

<html>
<head>
<title>Proxy Anonimo :: Spanish Web Proxy</title>
<meta name="keywords" content="proxy, webproxy, proxy online, spanish proxy" />
<meta name="description" content="Usa nuestro WebProxy An&#65533;nimo para comprobar como se ve una web desde otro sitio que no sea el ordenador en el que est&#65533;s sentado. Es un acceso remoto desde nuestro servidor." />

<style type="text/css">
    html, body {
       text-align: center;
    }
    #wrapper {
       width: 740px;
       margin: 0 auto 0 auto;
       text-align: left;
       padding: 10px;
       background: #eee;
       border: 4px outset #ccc;
    }
    #footer {
       margin: 10px 0 0 0; 
       font-size: 80%;
       color: #ccc;
    }
    #error {
       border: 1px solid red;
       padding: 2px;
       margin: 5px 0 15px 0;
       background: #eee;
    }
    .center { text-align: center; }

    /* TOOLTIP HOVER EFFECT */
    #tooltip{ 
       width:20em; background: #fff;
    }
</style>
    <script type="text/javascript">ginf={url:'http://proxyanonimo.es',script:'browse.php',target:{h:'http://myurl.com',p:'/',b:'',u:'http://myurl.com'},enc:{u:'iawpK1Q337kKRtEraNzZubjsx46C64Qd4aqEZ6vR2GrHZTZXxmNPoU7JM4aGYQJROYjBUFiKbxiYh5LEhmjt4g3G83dVHKClyLMhgTRfgX1nSBPYLYhG38a11bMwMcF8',e:'',x:'',p:''},b:'12'}</script>
    <script type="text/javascript" src="http://proxyanonimo.es/includes/main.js?1.4.1"></script></head>
<body>
<div id="wrapper">

    <h1 class="center"><a href="index.php">Proxy Anonimo</a></h1>
    <h2 class="center">IPv6 Ready!</h2> 
    <div id="error">Hotlinking directly to proxied pages is not permitted.</div><p style="text-align:right">[<a href="#" onclick="location.href='http://proxyanonimo.es/browse.php?u=http%3a%2f%2fmyurl.com&amp;b=12&amp;f=norefer'; return false;">Reload http://myurl.com</a>]</p>

    <h2>Proxy</h2>

       Usa nuestro WebProxy An&#65533;nimo para comprobar como se ve una web desde otro sitio que no sea el ordenador en el que est&#65533;s sentado. Es un acceso remoto desde nuestro servidor. Si tu conexi&#65533;n tiene alguna restricci&#65533;n, con nuestro Proxy An&#65533;nimo no tendr&#65533;as que tener problema o por lo menos, asegurarte de si la web es accesible o no. 

    <h2>URL</h2>

    <form action="includes/process.php?action=update" method="post" onsubmit="return updateLocation(this);">
        <input type="text" name="u" id="input" size="60">



        <!--<input type="submit" value="Go">-->

        <h3>Options</h3>
        <ul id="options">
            <li><input type="checkbox" name="encodeURL" id="encodeURL"><label for="encodeURL" class="tooltip" onmouseover="tooltip('Encrypts the URL of the page you are viewing so that it does not contain the target site in plaintext.')" onmouseout="exit();">Encrypt URL</label></li><li><input type="checkbox" name="encodePage" id="encodePage"><label for="encodePage" class="tooltip" onmouseover="tooltip('Helps avoid filters by encrypting the page before sending it and decrypting it with javascript once received.')" onmouseout="exit();">Encrypt Page</label></li><li><input type="checkbox" name="allowCookies" id="allowCookies" checked="checked"><label for="allowCookies" class="tooltip" onmouseover="tooltip('Cookies may be required on interactive websites (especially where you need to log in) but advertisers also use cookies to track your browsing habits.')" onmouseout="exit();">Allow Cookies</label></li><li><input type="checkbox" name="tempCookies" id="tempCookies" checked="checked"><label for="tempCookies" class="tooltip" onmouseover="tooltip('This option overrides the expiry date for all cookies and sets it to at the end of the session only - all cookies will be deleted when you shut your browser. (Recommended)')" onmouseout="exit();">Force Temporary Cookies</label></li><li><input type="checkbox" name="stripTitle" id="stripTitle"><label for="stripTitle" class="tooltip" onmouseover="tooltip('Removes titles from proxied pages.')" onmouseout="exit();">Remove Page Titles</label></li><li><input type="checkbox" name="stripJS" id="stripJS"><label for="stripJS" class="tooltip" onmouseover="tooltip('Remove scripts to protect your anonymity and speed up page loads. However, not all sites will provide an HTML-only alternative. (Recommended)')" onmouseout="exit();">Remove Scripts</label></li><li><input type="checkbox" name="stripObjects" id="stripObjects"><label for="stripObjects" class="tooltip" onmouseover="tooltip('You can increase page load times by removing unnecessary Flash, Java and other objects. If not removed, these may also compromise your anonymity.')" onmouseout="exit();">Remove Objects</label></li>      </ul>
    </form>

    <br>

    <br><br><br>

    <p><a href="#" onclick="location.href='http://s07.flagcounter.com/more/xu5M'; return false;"><img src="http://s07.flagcounter.com/count/xu5M/bg=FFFFFF/txt=000000/border=CCCCCC/columns=8/maxflags=248/viewers=De+donde+nos+visitan/labels=1/pageviews=1/" alt="free counters" border="0"></a></p>


    <div id="eXTReMe"><a href="#" onclick="location.href='http://extremetracking.com/open?login=proxyes'; return false;">
<img src="http://t1.extreme-dm.com/i.gif" style="border: 0;"
height="38" width="41" id="EXim" alt="eXTReMe Tracker" /></a>
<script type="text/javascript"><!--
EXref="";top.document.referrer?EXref=top.document.referrer:EXref=document.referrer;//-->
</script><script type="text/javascript"><!--
var EXlogin='proxyes' // Login
var EXvsrv='s10' // VServer
EXs=screen;EXw=EXs.width;navigator.appName!="Netscape"?
EXb=EXs.colorDepth:EXb=EXs.pixelDepth;EXsrc="src";
navigator.javaEnabled()==1?EXjv="y":EXjv="n";
EXd=document;EXw?"":EXw="na";EXb?"":EXb="na";
EXref?EXref=EXref:EXref=EXd.referrer;
EXd.write("<img "+EXsrc+"=http://e1.extreme-dm.com",
"/"+EXvsrv+".g?login="+EXlogin+"&amp;",
"jv="+EXjv+"&amp;j=y&amp;srw="+EXw+"&amp;srb="+EXb+"&amp;",
"l="+escape(EXref)+" height=1 width=1>");//-->
</script><noscript><div id="neXTReMe"><img height="1" width="1" alt=""
src="http://e1.extreme-dm.com/s10.g?login=proxyes&amp;j=n&amp;jv=n" />
</div></noscript></div>

<p class="center">Powered by <a href="#" onclick="location.href='http://www.glype.com/'; return false;">Glype</a>&reg; v1.4.1.</p> 
</div>

<script type="text/javascript">
var infolinks_pid = 1993344;
var infolinks_wsid = 0;
</script>
<script type="text/javascript" src="http://resources.infolinks.com/js/infolinks_main.js"></script>

</body>
</html>

Тогда... это возможно сделать?.

Что мне не хватает?

Может быть, служба веб-прокси, которую я пытаюсь переназначить, что-то? Возможно, другая служба веб-прокси может помочь мне лучше для моих нужд?

Ответ 1

Основная проблема, с которой вы, похоже, сталкиваетесь, заключается в том, что для примера прокси-сервера, который вы используете, требуется POST для обновления целевого URL-адреса, который вы пытаетесь просмотреть через прокси-сервер. Поэтому вы не получаете контент с целевой страницы и сообщение об ошибке

<div id="error">Hotlinking directly to proxied pages is not permitted.</div>

Я не знаю, как выглядит ваш код, но похоже, что вы можете использовать метод POST HttpWebRequest

WebRequest request = (HttpWebRequest)WebRequest.Create("http://www.glype-proxy.info/includes/process.php?action=update");

var postData = "url="+"http://www.example.com";
postData += "&allowCookies=on";
var data = Encoding.ASCII.GetBytes(postData);

request.Method = "POST";
request.ContentType = "application/x-www-form-urlencoded";
request.ContentLength = data.Length;

using (var stream = request.GetRequestStream()) {
    stream.Write(data, 0, data.Length);
}

var response = (HttpWebResponse)request.GetResponse();
var responseString = new StreamReader(response.GetResponseStream()).ReadToEnd();

Вам нужно будет найти или разместить прокси-сервер, который возвращает HTML-страницу, например http://www.glype-proxy.info/. Тем не менее, чтобы прокси работал правильно, он должен изменить ссылку на ресурсы страницы на свой собственный "проксированный" путь.

http://www.glype-proxy.info/browse.php?u=https%3A%2F%2Fwww.example.com%2F&b=4&f=norefer

В приведенном выше URL-адресе, если вам нужен путь к исходным ресурсам, вам нужно будет найти все перенаправленные ресурсы и unencode путь, переданный в качестве параметра u= для этого конкретного прокси-сервера. Кроме того, вы можете игнорировать дополнительные элементы, введенные прокси-сервером, в этом случае элемент <div id="include">.


Я считаю, что прокси-сервер, который вы используете, работает так же, как прокси-сервер Glype, который я использовал в этом примере, но у меня нет доступа к нему во время публикации. Кроме того, если вы хотите использовать другие прокси, вы можете заметить, что многие прокси отображают результат в iFrame (возможно, для предотвращения XSS, навигации или скининга).

Примечание.. Обычно использование другой службы вне встроенного API является плохой практикой, поскольку службы часто получают обновление графического интерфейса пользователя или некоторые другие изменения, которые могут сломать ваш script. Кроме того, эти службы могут столкнуться с перебоями или просто быть сняты.

Ответ 2

Я хотел бы предложить вам использовать прямой IP-адрес proxy: например, 115.238.225.26:80. Тогда вы можете легко справиться с проблемой, используя следующий код:

HttpWebRequest req = (HttpWebRequest) WebRequest.Create(new Uri("http://example.com"));
WebProxy webproxy = new WebProxy("115.238.225.26", 80);
webproxy.BypassProxyOnLocal = false;
req.Method = "GET";
req.Proxy = webproxy;
HttpWebResponse response = (HttpWebResponse) req.GetResponse();
var respStream = response.GetResponseStream();
var result = "";
if (respStream != null) {
    var strReader = new StreamReader(respStream);
    result = strReader.ReadToEnd();
}

Затем в переменной результата вы найдете содержимое страницы результатов или пустую строку в случае возникновения некоторых проблем (respStream == null). Кроме того, может потребоваться добавить обработку исключений для этого кода в случае возникновения каких-либо проблем со связью.