Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > C# (си шарп)
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 23.08.2014, 14:04   #1
alextrof94
Форумчанин
 
Регистрация: 16.03.2013
Сообщений: 599
По умолчанию C# получение Cookie через InternetGetCookieEx

Код:
using System.Runtime.InteropServices;
...
		[DllImport("wininet.dll", CharSet = CharSet.Auto, SetLastError = true)]
		static extern bool InternetGetCookieEx(string pchURL, string pchCookieName, StringBuilder pchCookieData, ref System.UInt32 pcchCookieData, int dwFlags, IntPtr lpReserved);
			
		public string GetGlobalCookies(string uri)
		{
			uint datasize = 1024;
			StringBuilder cookieData = new StringBuilder((int)datasize);
			if (InternetGetCookieEx(uri, null, cookieData, ref datasize, INTERNET_COOKIE_HTTPONLY, IntPtr.Zero) && cookieData.Length > 0)
				return cookieData.ToString().Replace(';', ',');
			else
			{
				MessageBox.Show(Marshal.GetLastWin32Error().ToString());
				return "";
			}
		}

		private void GetPage(int Number = 1)
		{
			try
			{
				LogAdd("Получение основной страницы");
				HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://www.САЙТ.com/open/page/" + Number.ToString());
				request.CookieContainer = new CookieContainer();
				if (GetGlobalCookies("http://www.САЙТ.com/") != null && GetGlobalCookies("http://www.САЙТ.com/").Length > 0)
					request.CookieContainer.SetCookies(new Uri("http://www.САЙТ.com/"), GetGlobalCookies("http://www.САЙТ.com/"));
				request.Method = "POST";
				string postData = "This is a test that posts this string to a Web server.";
				byte[] byteArray = Encoding.UTF8.GetBytes(postData);
				request.ContentType = "application/x-www-form-urlencoded";
				request.ContentLength = byteArray.Length;
				Stream dataStream = request.GetRequestStream();
				dataStream.Write(byteArray, 0, byteArray.Length);
				dataStream.Close();
				WebResponse response = request.GetResponse();
				dataStream = response.GetResponseStream();
				StreamReader reader = new StreamReader(dataStream);
				Page = reader.ReadToEnd();
				reader.Close();
				dataStream.Close();
				response.Close();
				LogAdd("Страница получена");
			}
			catch (Exception ex)
			{
				LogAdd("GetPage: " + ex.Message);
			}
		}
У меня работает, а вот у друга на компе данный метод всегда пустые куки возвращает.
GetLastWin32Error выдает 259 ошибку
Цитата:
ERROR_NO_MORE_ITEMS
259 (0x103)
No more data is available.
, загуглил, но ничего путного не нашел. В чем может быть проблема?
У обоих Win7 + IE11.
alextrof94$gmail.com

Последний раз редактировалось alextrof94; 23.08.2014 в 14:27.
alextrof94 вне форума Ответить с цитированием
Старый 23.08.2014, 15:09   #2
alextrof94
Форумчанин
 
Регистрация: 16.03.2013
Сообщений: 599
По умолчанию

Отбой. Друг-казел запускал не ту версию IE, она просто куки не сохраняла. 3 часа этой фигней маялся...
alextrof94$gmail.com
alextrof94 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Получение html через TWebBrowser bilibian Общие вопросы Delphi 1 24.07.2014 19:18
Через HttpWebResponse получить cookie? ruffini C# (си шарп) 2 26.09.2011 23:10
Получение cookie и POST параметров через WebBrowser (C# .net2) alexplato Фриланс 2 21.01.2011 13:56
Передача и получение файлов через Ftp -=Virus=- Работа с сетью в Delphi 0 11.07.2010 22:05