Я занимаюсь разработкой консольного приложения на C # для извлечения данных с сайта PHP. Веб-сайт имеет как публичное, так и расширенное представление для зарегистрированных пользователей. Я могу использовать свои учетные данные, свое имя пользователя и пароль для входа на сайт через FireFox, Edge и ID и успешного просмотра дополнительного материала. Анализ открытых данных не является проблемой, но проблема заключается в извлечении расширенных данных.
Я пытался использовать различные методы для создания файлов cookie на основе моих учетных данных для доступа к расширенному представлению. Моя логика такова: есть php-страница входа в систему с именем пользователя и паролем. После успешного входа в систему каждый последующий доступ к общедоступной странице будет отображать дополнительную информацию (расширенные данные), если вы вошли в систему.
Я пытаюсь либо передать свои учетные данные через контейнер cookie в httpwebrequest, либо скопировать мои существующие файлы cookie из firefox (после входа в систему) в мой контейнер cookie для моего httpwebrequest. После этого я бы использовал объект HttpWebResponse для просмотра возвращенного потока данных. Именно там я должен быть в состоянии идентифицировать расширенные данные в HTML. Однако, насколько мне известно, он только что вернул общественное мнение.
Я могу успешно открыть cookie-файлы firefox, но не знаю, успешно ли они используются в CookieContainer
//!!!!Firefox cookie method!!!!//
CookieContainer ffCookieContainer = new CookieContainer();
Cookie ffCookie = new Cookie();
bool fRtn = false;
string strPath, strTemp, strDb, strHost, strField, Value;
strPath = @"C:\Documents and Settings\YourUserName\Application Data\Mozilla\Firefox\Profiles\urq2tlhr.default\cookies.sqlite";
strDb = "Data Source=" + strPath;
// Now open the temporary cookie jar and extract Value from the cookie if we find it.
using (SqliteConnection conn = new SqliteConnection())
{
using (SqliteCommand cmd = conn.CreateCommand())
{
cmd.CommandText = "SELECT host, name, value, path, expiry, isSecure, isHttpOnly, lastAccessed, id FROM moz_cookies;";
conn.ConnectionString = strDb;
conn.Open();
using (SqliteDataReader reader = cmd.ExecuteReader())
{
while (reader.Read())
{
Value = reader.GetString(0) + " " + reader.GetString(1) + " " + reader.GetString(2) + " " + reader.GetString(3) + " " + reader.GetString(4) + " " + reader.GetString(5) + " " + reader.GetString(6) + " " + reader.GetString(7) + " " + reader.GetString(8);
if (!Value.Equals(string.Empty))
{
//fRtn = true;
//break;
try
{
ffCookie.Discard = false;
ffCookie.Expired = false;
ffCookie.Domain = reader.GetString(0);
ffCookie.Expires = Convert.ToDateTime("01/01/2025");
ffCookie.Domain = reader.GetString(0);
ffCookie.HttpOnly = false;
ffCookie.Secure = false;
ffCookie.Port = "";
ffCookie.Name = reader.GetString(1);
ffCookie.Path = reader.GetString(3);
ffCookie.Value = reader.GetString(2);
Console.WriteLine(Value);
ffCookieContainer.Add(ffCookie);
}
catch (Exception)
{
}
}
}
}
conn.Close();
}
}
HttpWebRequest request = (HttpWebRequest)WebRequest.Create("website/view");
request.CookieContainer = ffCookieContainer;
//SECOND METHOD creating cookies based on credentials
string parameters = "username=blah@domain.com&password=blah";
string userName = "blah@domain.com";
string password = "blah";
string url = "example.com/index.php?forcelogin=1";
HttpWebRequest requestTwo = (HttpWebRequest)WebRequest.Create(url);
requestTwo.Method = "POST";
requestTwo.Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8";
requestTwo.Headers.Add("Accept-Encoding: gzip,deflate");
requestTwo.Headers.Add("Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7");
requestTwo.KeepAlive = true;
requestTwo.Headers.Add("Keep-Alive: 900");
requestTwo.Referer = "example.com/index.php?forcelogin=1";
requestTwo.ContentLength = parameters.Length;
requestTwo.ContentType = "application/x-www-form-urlencoded";
requestTwo.CookieContainer = new CookieContainer();
using (Stream stream = requestTwo.GetRequestStream())
{
byte[] paramAsBytes = Encoding.Default.GetBytes(parameters);
stream.Write(paramAsBytes, 0, paramAsBytes.Count());
}
CookieContainer myContainer = new CookieContainer();
using (HttpWebResponse responseTwo = (HttpWebResponse)requestTwo.GetResponse())
{
foreach (var cookie in responseTwo.Cookies)
{
var properties = cookie.GetType()
.GetProperties()
.Select(p => new
{
Name = p.Name,
Value = p.GetValue(cookie)
});
foreach (var property in properties)
{
Console.WriteLine("{0}: {1}", property.Name, property.Value);
}
}
myContainer = requestTwo.CookieContainer;
}
//repeat the cookie reassignment to the web request for the public view of the web page
//READ THE RESPONSE
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
if (response.StatusCode == HttpStatusCode.OK)
{
Stream receiveStream = response.GetResponseStream();
StreamReader readStream = null;
if (response.CharacterSet == null)
readStream = new StreamReader(receiveStream);
else
readStream = new StreamReader(receiveStream, Encoding.GetEncoding(response.CharacterSet));
string data = readStream.ReadToEnd();
response.Close();
readStream.Close();
}
Я ожидаю, что смогу увидеть вновь сгенерированное значение html на странице ответа, но я его не вижу.