2009-07-09 2 views
-1

Привет Я пытался читать страницы с помощью HttpWebRequest, как этотHTTPWebRequest reades только стартовой

string lcUrl = "http://www.greatandhra.com"; 
    HttpWebRequest loHttp = (HttpWebRequest)WebRequest.Create(lcUrl); 
    loHttp.Timeout = 10000;  // 10 secs 
    loHttp.UserAgent = "Code Sample Web Client"; 
    HttpWebResponse loWebResponse = (HttpWebResponse)loHttp.GetResponse(); 
    Encoding enc = Encoding.GetEncoding(1252); // Windows default Code Page 
    StreamReader loResponseStream = 
     new StreamReader(loWebResponse.GetResponseStream(), enc); 
    string lcHtml = loResponseStream.ReadToEnd(); 
    mydiv.InnerHtml = lcHtml; 
    // Response.Write(lcHtml); 
    loWebResponse.Close(); 
    loResponseStream.Close(); 

я могу иметь возможность читать эту страницу и привязать его к mydiv. Но когда я нажимаю на любую из ссылок в этом div, он не отображает никакого результата. Потому что мое приложение не содержит весь сайт. Итак, что мы будем делать сейчас.

Может кто-нибудь скопировать мой код и проверить его плз

Nägu

+0

Вы уверены, что это потому, что на всем сайте нет? Смотри внимательно. –

ответ

0

код вы кладете в .innerHTML в DIV содержит всю страницу (включая < HTML>, < тело>, </html > и </body>), что может вызвать мириад проблем с любым количеством браузеров.

Я бы либо перешел на iframe, либо рассмотрел какой-то разбор HTML-кода для удаленного сайта и отображение преобразованной версии (т. Е. Разделил теги HTML, BODY, META, заменил некоторые URL-адреса ссылок и т. Д.).

1

Я уверен, что вы не можете вставить полную страницу в DIV, не нарушая что-то. На самом деле весь тег заголовка может вообще пропускаться (и любой код javascript там может не запускаться). Учитывая то, что вы, похоже, хотите сделать, я предлагаю вам использовать IFRAME с динамическим src, который также, надеюсь, поднимет давление с вашего сервера (что не будет отвечать за выборку html, которая будет зеркально отражена).

+0

ранее я помещал только IFRAME, но iframe нуждался в источнике с физическим файлом. Но здесь я не хочу создавать какой-либо физический html-файл. Просто я хочу передать объект только – Nagu

1

Если вам действительно нужна целая страница HTML, встроенная в другую, то, скорее всего, используется тег IFRAME, а не DIV.

Вместо того, чтобы создавать веб-запрос и иметь весь этот код для извлечения удаленной страницы, вы можете просто установить атрибут src для IFRAME, чтобы указать на странице, которую вы хотите отобразить.

Например, что-то подобное в разметке:

<iframe src="<%=LcUrl %>" frameborder="0"></iframe> 

где LcUrl является собственностью на код-за страницы, которая предоставляет вашу строку lcUrl из вашего образца.

В качестве альтернативы, вы можете сделать IFRAME RUNAT = «сервер» и установите его свойство Src программно (или даже вводить innerHTML таким образом, sismilar вашего образец коды, если вы действительно хотели).

+0

Привет, спасибо за ваш ответ. Если я устанавливаю src для iframe, я не могу прочитать выделенный текст iframe. Он показывает, что доступ запрещен. Вот почему я сбрасываю в локальный html-файл и устанавливаю источник в iframe. – Nagu

+0

Когда вы говорите «я не могу прочитать выделенный текст iframe», вы имеете в виду от javascript на главной странице «хостинга»? Если это так, то это связано с междоменной безопасностью в IE. Он не позволит вам, с одного кадра, читать содержимое другого, если оно из другого домена. Это делается для предотвращения межсайтовых скриптовых атак (среди прочего). Другой вариант - посмотреть, как сделать IFRAME runat = "server", и вставлять HTML в свой внутреннийHTML, как вы делали для своего DIV. Я считаю, что * должен * правильно отобразить удаленную полную страницу в IFRAME. –

0

Но когда я нажимаю на любую из ссылок в том, что Див его не отображает какого-либо результата

Вероятно потому, что ссылки на страницу загрузки относительны ... Если вы просто скопировать HTML в DIV на вашей странице, браузер считает ссылки относительно текущего URL-адреса: он не знает о происхождении этого контента. Я думаю, что решение заключается в анализе загруженного HTML и преобразовании относительных URL-адресов в атрибутах href в абсолютные URL-адреса

0

Если вы хотите вставить его, вам нужно снять все, кроме части тела. Это означает, что вам нужно проанализировать строку lcHTML для < body .... > и удалить все до и включить тег тела. Вы также должны удалить все от </body >.Затем вам нужно разобрать строку для всех вхождений < a href = " ..... " >, которые не начинаются с http: // и включают http://www.greatandhra.com или установить < base target = " http://www.greatandhra.com " > в вашей голове разделе.

Если вы не хотите вставлять, просто очистите буфер ответа и передайте строку lcHTML обратно в браузер.

PS: Мне нужно было написать все h t t p с пробелами, чтобы иметь возможность опубликовать это.

0

Похоже, что вы пытаетесь показать другой сайт, встроенный в ваш сайт. Чтобы это сработало, отбросив его в div, вам нужно будет извлечь код между тегами тела, поскольку он не будет действителен с html и головой в середине другой страницы.

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