powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Crawler
13 сообщений из 13, страница 1 из 1
Crawler
    #32866814
Nis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Nis
Гость
public string getsource(string url)

{

try

{

System.Net.WebClient MyWebClient=new System.Net.WebClient();
byte[] MyDatabuffer=MyWebClient.DownloadData(url);
return System.Text.Encoding.ASCII.GetString(MyDatabuffer);

}



столкнулся с проблемой что не всегда получаю тот код который получаю при View-->Source
Пробовал также использовать HttpWebRequest, HttpWebResponse...
Не помогает...
Что делать ???
...
Рейтинг: 0 / 0
Crawler
    #32867143
Serg****
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А что получаешь? часть кода или что-то другое?
и в каких случаях?
...
Рейтинг: 0 / 0
Crawler
    #32867214
Nis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Nis
Гость
получаю совсем другой код.
это происходит в редких случаях, в сайтах как: miniclip.com, expedia.com
...
Рейтинг: 0 / 0
Crawler
    #32868446
Фотография Roman S. Golubin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вероятно, стоит заменить http-заголовок User-Agent на тот же, который отсылает твой браузер ( в котором ты смотришь исходный код). Так как hhtp-сервер (тот же IIS) может содержать различные шаблоны страниц для различных агентов.

PS: Насчет кодировки - в http-заголовках возвращается кодировка ответа сервера и вместо

> System.Text.Encoding.ASCII

стоит использовать ее
...
Рейтинг: 0 / 0
Crawler
    #32868825
Nis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Nis
Гость
Roman S. Golubin
PS: Насчет кодировки - в http-заголовках возвращается кодировка ответа сервера и вместо

> System.Text.Encoding.ASCII

стоит использовать ее

а можно подробнее про кодировку...
пример случайно не найдётся ?
...
Рейтинг: 0 / 0
Crawler
    #32869546
Фотография Roman S. Golubin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Nisа можно подробнее про кодировку...
пример случайно не найдётся ?

Ну, примерно так (не могу гарантировать, что всегда будет работать правильно):

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
static void Main(){
  string URL = "http://localhost";
  string charset = "us-ascii";
  WebClient client = new WebClient();
		
  byte[] bytes = client.DownloadData(URL);

  Regex ex = new Regex(@".*;\s*charset=(?<charset>[^\s;]*)");

  Match m = ex.Match(client.ResponseHeaders["Content-Type"]);
  if( m.Success )
    charset = m.Groups["charset"].Value;
  string s = System.Text.Encoding.GetEncoding(charset).GetString(bytes);
}

--
WBR, Roman S. Golubin

PS: Заголовков может быть море... рекомендую ознакомиться с RFC на протокол HTTP на сайте www.ietf.org ...
...
Рейтинг: 0 / 0
Crawler
    #32869909
Nis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Nis
Гость
спасибо!!! Но мне это не помогло :(
нашел, следующую функцию, но и она не помогает



Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
private StreamReader DecodeData(WebResponse w) {
			// first see if content length header has charset = calue
			String charset = null;
			String ctype = w.Headers["content-type"];
			if(ctype != null) {
				int ind = ctype.IndexOf("charset=");
				if(ind != -1) {
					charset = ctype.Substring(ind + 8);
				}
			}

			// save data to a memorystream
			MemoryStream rawdata = new MemoryStream();
			byte [] buffer = new byte[1024];
			Stream rs = w.GetResponseStream();
			int read = rs.Read(buffer,0,buffer.Length);
			while(read > 0) {
				rawdata.Write(buffer,0,read);
				read = rs.Read(buffer,0,buffer.Length);
			}

			rs.Close();

			//
			// if ContentType is null, or did not contain charset, we search in body
			//
			if(charset == null) {
				MemoryStream ms = rawdata;
				ms.Seek(0,SeekOrigin.Begin);

				StreamReader srr = new StreamReader(ms,Encoding.ASCII);
				String meta = srr.ReadToEnd();
          
				if(meta != null) {
					int start_ind = meta.IndexOf("charset=");
					int end_ind = -1;
					if(start_ind != -1) {
						end_ind = Math.Min(meta.IndexOf("\"", start_ind),meta.IndexOf("'", start_ind));
						end_ind = Math.Min(end_ind,meta.IndexOf("/", start_ind));
						end_ind = Math.Min(end_ind,meta.IndexOf(">", start_ind));
						if(end_ind != -1) {
							int start = start_ind + 8;
							charset = meta.Substring(start, end_ind - start + 1);
							charset = charset.TrimEnd(new Char[] { '>','"','\'','/' });
						}
					}
				}
			}

			Encoding e = null;
			try
			{
				if (charset == null) 
				{
					e = Encoding.ASCII; //default encoding
				} 
				else 
				{
					e = Encoding.GetEncoding(charset);
				}
			}
			catch (Exception ex)
			{
				string str = ex.ToString();
				e = Encoding.ASCII;
			}

			rawdata.Seek(0,SeekOrigin.Begin);
			StreamReader sr = new StreamReader(rawdata, e);
			
			return sr;
		}


я думаю что проблема с expedia.com вовсе не в кодировке...
я получил следующую строчку применив ascii:

tScripting must be enabled before you can continue.\r\n\tTo enable scripting, you need to make a simple adjustment to your browser settings.<BR><BR>\r\n\t\r\n\t<A HREF=\"/pubspec/help/ENU1033/h_ex_actscrpt.htm\">Click here if you need more help with your browser.</A><BR><BR>\r\n\t<B>After you have enabled
scripting refresh this page.
...
Рейтинг: 0 / 0
Crawler
    #32870156
Фотография Roman S. Golubin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Nisя думаю что проблема с expedia.com вовсе не в кодировке...
я получил следующую строчку применив ascii:

tScripting must be enabled before you can continue.\r\n\tTo enable scripting, you need to make a simple adjustment to your browser settings.<BR><BR>\r\n\t\r\n\t<A HREF=\"/pubspec/help/ENU1033/h_ex_actscrpt.htm\">Click here if you need more help with your browser.</A><BR><BR>\r\n\t<B>After you have enabled
scripting refresh this page.

Дык, выше было сказано - Заголовок "User-Agent" выстави в Mozilla/4.0/Internet Explorer ... что-то там... как обычный IE его отдает. Вероятность что заработает будет выше на порядок, т.к. сервер первым делом проверяет именно его и локальные переменные типа IsScriptingSupported (или вроде того) проставляет, а потом уже отдает твое сообщение дольше обработчику запроса. Тот видит, что скрипты не поддерживаются твоим агентом и посылает тебе такой ответ.

Если и это не заработает, то, вероятно, придется еще какие-то заголовки добавлять. Полное описание смотри в rfc по HTTP на ietf.org или www.w3c.org

--
Удачи, Roman S. Golubin

PS: А то что у тебя написано делает тоже самое что и мой пример... а потом занимается полной фигней (не определив тип контекста роет его на предмет тегов :-) которых в нем может и не быть вовсе)
...
Рейтинг: 0 / 0
Crawler
    #32870283
Nis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Nis
Гость
авторЗаголовок "User-Agent" выстави в Mozilla/4.0/Internet Explorer
пробовал... это... и многое другое...
в rfc копаться, времени пока нет...
если что найду, напишу...
...
Рейтинг: 0 / 0
Crawler
    #32877682
marina milanina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Заголовок HOST надо добавить и поместить туда доменное имя, к которому вы обращаетесь (напр. Host: roller.ru)
Скорей всего поможет
Дело в том, что большинство веб-серверов позволяет на один ip-адрес навесить несколько веб-сайтов
При запросе к такому веб-серверу, конкретный сайт определяется по заголовку HOST
...
Рейтинг: 0 / 0
Crawler
    #32877709
marina milanina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот пример кода:
Код: plaintext
myWebClient.Headers.Add("Header","roller.ru");


В некоторых случаях, для получения нужного кода надо ставить еще и http-referer (для получения результатов работы динамических скриптов, проверяющих этот параметр (счетчиков, как правило))
Код: plaintext
myWebClient.Headers.Add("Referer","roller.ru");
...
Рейтинг: 0 / 0
Crawler
    #32878728
marina milanina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сорри, очепяталась. Первый пример конечно такой:

Код: plaintext
myWebClient.Headers.Add("Host","roller.ru");
...
Рейтинг: 0 / 0
Crawler
    #32878976
Nis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Nis
Гость
Большое спасибо за совет!
Но результат тот-же, тоесть результата нет.
А после выполнения:
Код: plaintext
MyWebClient.Headers.Add("Host","expedia.com");
при вызове метода:
Код: plaintext
MyWebClient.DownloadData(url);
получаю: Exception - An exception occurred during a WebClient request.
Но все равно спасибо!
...
Рейтинг: 0 / 0
13 сообщений из 13, страница 1 из 1
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Crawler
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]