HttpWebRequest читает только домашнюю страницу - PullRequest
0 голосов
/ 09 июля 2009

Привет, я пытался прочитать страницу, используя HttpWebRequest, как это

    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, он не показывает никакого результата. Потому что мое приложение не содержит весь сайт. Итак, что мы будем делать сейчас.

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

Nagu

Ответы [ 6 ]

1 голос
/ 09 июля 2009

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

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

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

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

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

В качестве альтернативы вы можете сделать IFRAME runat = "server" и установить егоСвойство src программно (или даже внедрить innerHTML таким образом, чтобы это было смиллярно вашему примеру кода, если вы действительно хотели бы).

1 голос
/ 09 июля 2009

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

0 голосов
/ 09 июля 2009

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

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

0 голосов
/ 09 июля 2009

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

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

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

0 голосов
/ 09 июля 2009

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

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

0 голосов
/ 09 июля 2009

Код, который вы помещаете внутрь .InnerHtml элемента div, содержит всю страницу (включая , , и ), что может вызвать массу проблем с любым количеством браузеров. .

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

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