Potrzebuję wykonać pewne działania w panelu administracyjnym wordpress programowo, ale nie mogę zarządzać, jak zalogować się do Wordpress przy użyciu C# i HttpWebRequest.Jak programowo logować się do wordpressa?
Oto co mam zrobić:
private void button1_Click(object sender, EventArgs e)
{
string url = "http://localhost/wordpress/wp-login.php";
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
CookieContainer cookies = new CookieContainer();
SetupRequest(url, request, cookies);
//request.Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8";
//request.Headers["Accept-Language"] = "uk,ru;q=0.8,en-us;q=0.5,en;q=0.3";
//request.Headers["Accept-Encoding"] = "gzip,deflate";
//request.Headers["Accept-Charset"] = "windows-1251,utf-8;q=0.7,*;q=0.7";
string user = "test";
string pwd = "test";
request.Credentials = new NetworkCredential(user, pwd);
string data = string.Format(
"log={0}&pwd={1}&wp-submit={2}&testcookie=1&redirect_to={3}",
user, pwd,
System.Web.HttpUtility.UrlEncode("Log In"),
System.Web.HttpUtility.UrlEncode("http://localhost/wordpress/wp-admin/"));
SetRequestData(request, data);
ShowResponse(request);
}
private static void SetupRequest(string url, HttpWebRequest request, CookieContainer cookies)
{
request.CookieContainer = cookies;
request.UserAgent = "Mozilla/5.0 (Windows; U; Windows NT 6.0; uk; rv:1.9.1.2) Gecko/20090729 Firefox/3.5.2 (.NET CLR 3.5.30729)";
request.KeepAlive = true;
request.Timeout = 120000;
request.Method = "POST";
request.Referer = url;
request.ContentType = "application/x-www-form-urlencoded";
}
private void ShowResponse(HttpWebRequest request)
{
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
responseTextBox.Text = (((HttpWebResponse)response).StatusDescription);
responseTextBox.Text += "\r\n";
StreamReader reader = new StreamReader(response.GetResponseStream());
responseTextBox.Text += reader.ReadToEnd();
}
private static void SetRequestData(HttpWebRequest request, string data)
{
byte[] streamData = Encoding.ASCII.GetBytes(data);
request.ContentLength = streamData.Length;
Stream dataStream = request.GetRequestStream();
dataStream.Write(streamData, 0, streamData.Length);
dataStream.Close();
}
Ale niestety w responce mam tylko HTML kod źródłowy strony logowania i wydaje się, że cookies nie zawierają identyfikator sesji. Wszystkie żądania, które wykonuję po tym kodzie, również zwracają źródło HTML strony logowania, więc mogę założyć, że nie loguje się poprawnie.
Czy ktoś może mi pomóc rozwiązać ten problem lub podać przykład pracy?
Najważniejsze, co chcę osiągnąć, to skanowanie w poszukiwaniu nowych obrazów w pluginach Nextgen Gallery dla Wordpress. Czy istnieje sposób na XML-RPC?
Z góry dziękuję.
Niektóre kod byłby być złe, jak inne ludzie mogą też szukać rozwiązania (takiego jak ja). To jest kwestia forum ... – C4u
Tak okrutny! dlaczego nie ma rozwiązania? –
to jest zaakceptowana odpowiedź? brak kodu? – DidIReallyWriteThat