Реализация авторизации на wordpress на vb.net

Реализация авторизации на wordpress на vb.net

Данный код покажет как реализовать win приложение которое позволить производить авторизацию в панель управления сайтом на вордпрес. Для начала я изучил заголовки, которые отправляются на сервер сайта и изучил что он мне отвечает. В данном вопросе мне помог плагин для Firefox LiveHttpHeaders.

Самое сложное что здесь было, это правильно сформировать куки. Мы отправляем запрос на сервер, он нам возвращает ответ и присваивает нам Куки, которые мы должны ему отправить при следующем запросе, но проблема оказалась в том, что сервер нам куки выдает в "мусором"("path/;" и т.д, а принимать хочет только чистые параметры, поэтому я прежде из куки взял только необходимые параметры и только их отравлял за счет чего у меня получилась авторизация.

Да и чуть не забыл, при последнем запросе, сервер вновь дает нам куки, из этого куки нам нужен только 1 параметр, мы его берем и добавляем к нашему чистому куки. И вот этот куки и нужно будет использовать в дальнейшем при следующих запросах.

Dim myLogin As String = txtLogin.Text
        Dim myPass As String = txtPass.Text
        Dim myUrl As String = "http://soft.dunlom.ru"'здесь ваш сайт на WP
 
        Dim myHttpWebRequest As HttpWebRequest
        Dim myHttpWebResponse As HttpWebResponse
 
        Dim sCookies As String = "wordpress_test_cookie=WP+Cookie+check"
 
        myHttpWebRequest = HttpWebRequest.Create(myUrl & "/wp-login.php")
        myHttpWebRequest.Method = "POST"
        myHttpWebRequest.Referer = myUrl & "/wp-admin"
        myHttpWebRequest.UserAgent = "Mozilla/5.0 (Windows NT 6.1; rv:15.0) Gecko/20100101 Firefox/15.0.1"
        myHttpWebRequest.Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8"
        myHttpWebRequest.Headers.Add("Accept-Language", "ru-ru,ru;q=0.8,en-us;q=0.5,en;q=0.3")
        myHttpWebRequest.ContentType = "application/x-www-form-urlencoded"
        If Not String.IsNullOrEmpty(sCookies) Then
            myHttpWebRequest.Headers.Add(HttpRequestHeader.Cookie, sCookies)
        End If
        myHttpWebRequest.AllowAutoRedirect = False
        Dim sQueryString As String = "log=" & myLogin & "&pwd=" & myPass
        Dim ByteArr As Byte() = Encoding.GetEncoding(1251).GetBytes(sQueryString)
        myHttpWebRequest.ContentLength = ByteArr.Length()
        myHttpWebRequest.GetRequestStream().Write(ByteArr, 0, ByteArr.Length)
        myHttpWebResponse = myHttpWebRequest.GetResponse()
        Dim myStreamReader As New StreamReader(myHttpWebResponse.GetResponseStream, Encoding.GetEncoding(65001))
        sCookies = ""
        If Not String.IsNullOrEmpty(myHttpWebResponse.Headers("Set-Cookie")) Then
            sCookies = myHttpWebResponse.Headers("Set-Cookie")
        End If
 
        Dim wtc As String = "" 'wordpress_test_cookie
        Dim wp As String = "" 'wordpress_
        Dim wli As String = "" 'wordpress_logged_in
 
        For i = 1 To sCookies.Length
            If Mid$(sCookies, i, 22) = "wordpress_test_cookie=" Then
                For j = i + 22 To sCookies.Length
                    If Mid$(sCookies, j, 1) = ";" Or j = sCookies.Length Or Mid$(sCookies, j, 1) = "," Then
                        wtc = Mid$(sCookies, i, j - i) '& ";"
                        Exit For
                    End If
                Next j
            End If
            If Mid$(sCookies, i, 10) = "wordpress_" And Mid$(sCookies, i, 11) <> "wordpress_l" Then
                For j = i + 10 To sCookies.Length
                    If Mid$(sCookies, j, 1) = ";" Or j = sCookies.Length Or Mid$(sCookies, j, 1) = "," Then
                        wp = Mid$(sCookies, i, j - i) & "; "
                        Exit For
                    End If
                Next j
            End If
            If Mid$(sCookies, i, 19) = "wordpress_logged_in" Then
                For j = i + 19 To sCookies.Length
                    If Mid$(sCookies, j, 1) = ";" Or j = sCookies.Length Or Mid$(sCookies, j, 1) = "," Then
                        wli = Mid$(sCookies, i, j - i) & "; "
                        Exit For
                    End If
                Next j
            End If
        Next i
 
        sCookies = wp & wli & wtc
 
 
        Dim wps As String = "" 'wp-settings-time-1
        myHttpWebRequest = HttpWebRequest.Create(myUrl & "/wp-admin/")
        myHttpWebRequest.Method = "GET"
        myHttpWebRequest.Referer = myUrl & "/wp-login.php"
        myHttpWebRequest.UserAgent = "Mozilla/5.0 (Windows NT 6.1; rv:15.0) Gecko/20100101 Firefox/15.0.1"
        myHttpWebRequest.Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8"
        myHttpWebRequest.Headers.Add("Accept-Language", "ru-ru,ru;q=0.8,en-us;q=0.5,en;q=0.3")
        If Not String.IsNullOrEmpty(sCookies) Then
            myHttpWebRequest.Headers.Add(HttpRequestHeader.Cookie, sCookies)
        End If
        myHttpWebRequest.AllowAutoRedirect = False
        myHttpWebResponse = myHttpWebRequest.GetResponse()
        If Not String.IsNullOrEmpty(myHttpWebResponse.Headers("Set-Cookie")) Then
            wps = myHttpWebResponse.Headers("Set-Cookie")
        End If
        Dim myStreamReader1 As New StreamReader(myHttpWebResponse.GetResponseStream, Encoding.GetEncoding(65001))
 
        For i = 1 To wps.Length
            If Mid$(wps, i, 19) = "wp-settings-time-1=" Then
                For j = i + 19 To wps.Length
                    If Mid$(wps, j, 1) = ";" Or Mid$(wps, j, 1) = ";" Or j = wps.Length Then
                        wps = Mid$(wps, i, j - i)
                        Exit For
                    End If
                Next j
            End If
        Next
 
        sCookies = sCookies & "; " & wps
        myHttpWebRequest = HttpWebRequest.Create(myUrl & "/wp-admin/edit.php")
        myHttpWebRequest.Method = "GET"
        myHttpWebRequest.Referer = myUrl & "/wp-admin.php"
        myHttpWebRequest.UserAgent = "Mozilla/5.0 (Windows NT 6.1; rv:15.0) Gecko/20100101 Firefox/15.0.1"
        myHttpWebRequest.Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8"
        myHttpWebRequest.Headers.Add("Accept-Language", "ru-ru,ru;q=0.8,en-us;q=0.5,en;q=0.3")
        If Not String.IsNullOrEmpty(sCookies) Then
            myHttpWebRequest.Headers.Add(HttpRequestHeader.Cookie, sCookies)
        End If
        myHttpWebRequest.AllowAutoRedirect = False
        myHttpWebResponse = myHttpWebRequest.GetResponse()
        If Not String.IsNullOrEmpty(myHttpWebResponse.Headers("Set-Cookie")) Then
            wps = myHttpWebResponse.Headers("Set-Cookie")
        End If
        myStreamReader1 = New StreamReader(myHttpWebResponse.GetResponseStream, Encoding.GetEncoding(65001))
 
        Dim txt As String = myHttpWebResponse.StatusCode & vbCrLf
        txt += myHttpWebResponse.Headers.ToString & vbCrLf & vbCrLf & vbCrLf & vbCrLf
        txt += myStreamReader1.ReadToEnd
 
 
        TextBox1.Text += txt

Код не сложный, думаю вы разберетесь, а если нет, то жду ваши вопросы. Последний запрос заходит на авторизованную страницу "записи". Дальше уже я писать ничего не стал. Тут уже ваша фантазия, можно реализовать добавление записей, страниц и т.д через приложение не заходя на сам сайт.

P.S данную статью решил написать после того как на форуме увидел данный вопрос. Решил что данный код будет полезен не только для тех кто хочет реализовать авторизацию на wordpress, но и для авторизации на другие сайты.

Выкладываю сам проект Исходник

3 Комментария прокомментировать

Olunka
4 февраля 2013 в 21:37

Спасибо за код, больше нигде в сети его не нашла. Теперь буду разбираться что к чему.

ответить
Илья
27 октября 2012 в 21:36

Спасибо, теперь ясно как работать с куки и вообще с Post запросами на vb.net

ответить
Альберт
9 октября 2012 в 21:36

Большое спасибо, у меня как раз была идея сделать автонаполнение своего блога на вордпресе, т.к я знаю только visual basic и не знаю пхп, то данный пример очень мне поможет осуществить свою идею. еще раз спасибо!!!

ответить

Добавить комментарий

Текст *

Яндекс.Метрика