Форум программистов, компьютерный форум, киберфорум
Visual Basic .NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.86/7: Рейтинг темы: голосов - 7, средняя оценка - 4.86
5 / 2 / 0
Регистрация: 09.11.2012
Сообщений: 26
.NET 4.x

Изменение кода плагина в Wordpress через httprequest

09.11.2012, 10:59. Показов 1429. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте! Вот тут написано, как авторизоваться на сайте Wordpress, а мне нужно еще изменить исходный код плагина или залить новый. Проблема в том, что при закачке передается параметр который указан вот так
<input type="hidden" id="_wpnonce" name="_wpnonce" value="4dff4759ed">
и он генерируется рандомно (это защита от xss вроде). Так вот, что нужно сделать чтобы загрузить плагин на wordpress программно? Или, например, как можно сменить исходный код плагина? Просто когда я пытаюсь заменить исходный код плагина у меня почему-то ничего не происходит и судя по исходному коду получаемой страницы у меня открывается тупо страница редактирования.
вот как я меняю исходный код:
VB.NET
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
If InStr(1, txt, "plugin-editor.php?file=hello.php") <> 0 Then
            myHttpWebRequest = HttpWebRequest.Create(myUrl & "wp-admin/plugin-editor.php?file=hello.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
            sQueryString = Code1 '' тут мы пишем исходный код того, чем хочу заменить код плагина
            ByteArr = Encoding.GetEncoding(1251).GetBytes(sQueryString)
            myHttpWebRequest.ContentLength = ByteArr.Length()
            myHttpWebRequest.GetRequestStream().Write(ByteArr, 0, ByteArr.Length)
            myHttpWebResponse = myHttpWebRequest.GetResponse()
            Dim myStreamReader2 As New StreamReader(myHttpWebResponse.GetResponseStream, Encoding.GetEncoding(65001))
 
        ElseIf InStr(1, txt, "edit") <> 0 Then
 
            
            myHttpWebRequest = HttpWebRequest.Create(myUrl & "wp-admin/plugin-editor.php?file=hello-dolly/hello.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
            sQueryString = Code1 '' тут мы пишем исходный код того, чем хочу заменить код плагина
            ByteArr = Encoding.GetEncoding(1251).GetBytes(sQueryString)
            myHttpWebRequest.ContentLength = ByteArr.Length()
            myHttpWebRequest.GetRequestStream().Write(ByteArr, 0, ByteArr.Length)
            myHttpWebResponse = myHttpWebRequest.GetResponse()
            Dim myStreamReader3 As New StreamReader(myHttpWebResponse.GetResponseStream, Encoding.GetEncoding(65001))
 
            Dim txt2 As String = myHttpWebResponse.StatusCode & vbCrLf
            txt2 += myHttpWebResponse.Headers.ToString & vbCrLf & vbCrLf & vbCrLf & vbCrLf
            txt2 += myStreamReader3.ReadToEnd
            Checkcode2.Text = txt2
            Checkcode3.Text = Code1
где переменная txt содержит исходный код страницы
тут я сначала смотрю есть ли в исходном коде страницы ссылка на редактирование плагина hello dolly (это 1 из двух стандартных плагинов) а затем, смотрю нет ли его среди заново закачанных (разница в пути до плагина). ну а затем посылаю пост запрос на редактирование. то, что написано в конце это для того, чтобы проверить что мне ответит сервер.ответом является страница редактирования плагина.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
09.11.2012, 10:59
Ответы с готовыми решениями:

Считывание API с сайта через httpRequest
Кто может помочь с проблемой со считыванием API с сайта VK? Раньше программа работала. И считывала данные с файла feed.php ...

Установка плагина WordPress
Здравствуйте, помогите установить плагин https://wp-kama.ru/id_142/kama-thumbnail.html/comment-page-3#comments Кто знает какой-нибудь...

Доработка плагина wordpress
Вообщем проблема такая. Есть плагин userPRO к нему есть дополнение privateMessaging нужно доработать функцию оповещения когда пользователю...

8
29 / 29 / 1
Регистрация: 01.10.2010
Сообщений: 171
12.11.2012, 12:43
не глядя, возможно причина в том что нужно сначала зайти на страницу редактирования, в заголовках или в самом html коде собрать все необходимые параметры, которые нужно будет для отправки запроса нового кода плагина.


P.S. Если программа местная и только для себя, для облегчения каких либо функций можно воспользоваться компонентом Webbrowser. C ним не нужно будет работать с куками, просто нужно будет задать по каким кнопкам ему нажимать, что то вроде имитации.
1
5 / 2 / 0
Регистрация: 09.11.2012
Сообщений: 26
13.11.2012, 09:15  [ТС]
тогда несколько вопросов:
1) как вставить текст форму (в вордпрессе же код плагина в форме находится) через webbrowser
2) каким образом можно залить файл (через webbrowser)? Ну знаешь, есть формы, выглядящие как
HTML5
1
2
3
4
5
6
7
<h4>Установить плагин в формате .zip</h4>
    <p class="install-help">Если у вас есть архив плагина в формате .zip, здесь можно загрузить и установить его.</p>
    <form method="post" enctype="multipart/form-data" action="http://***/wp-admin/update.php?action=upload-plugin">
        <input type="hidden" id="_wpnonce" name="_wpnonce" value="ac5a9d425f" /><input type="hidden" name="_wp_http_referer" value="/wp-admin/plugin-install.php?tab=upload" />     <label class="screen-reader-text" for="pluginzip">Архив плагина</label>
        <input type="file" id="pluginzip" name="pluginzip" />
        <input type="submit" class="button" value="Установить" />
    </form>
0
29 / 29 / 1
Регистрация: 01.10.2010
Сообщений: 171
13.11.2012, 10:05
так по порядку
не знаю какая у тебя версия WP но в моей код находится в textarea под id newcontent, в таком случае делаем так:
VB.NET
1
WebBrowser1.Document.GetElementById("newcontent").InnerText = "....новый php код...."
далее нам нужно нажать на кнопку "обновить файл"
сначала в цикле я перебираю все и ищу именно нашу кнопку, после чего нажимаю
VB.NET
1
2
3
4
5
6
7
8
9
10
        Dim temp As Integer = 0
        For i = 0 To WebBrowser1.Document.GetElementsByTagName("input").Count - 1
            If WebBrowser1.Document.GetElementsByTagName("input").Item(i).GetAttribute("value") = "Обновить файл" Then
                temp = i
                Exit For
            End If
        Next
 
'собственно само нажатие
        WebBrowser1.Document.GetElementsByTagName("input").Item(temp).InvokeMember("click")
2
9 / 7 / 0
Регистрация: 09.08.2012
Сообщений: 79
13.11.2012, 10:38
оо нужная тема! тоже думал вот над этим всем. раз вставка в форму уже есть, то на счет загрузки файла советую почитать вот это. тут очень хитрый прием описан.
1
5 / 2 / 0
Регистрация: 09.11.2012
Сообщений: 26
13.11.2012, 10:52  [ТС]
спасибо, это код на C#? а как сделать тоже самое на vb?
0
29 / 29 / 1
Регистрация: 01.10.2010
Сообщений: 171
13.11.2012, 15:51
Rito4ka, может поможет http://www.developerfusion.com... arp-to-vb/
0
 Аватар для _Лёша_
388 / 377 / 22
Регистрация: 08.02.2011
Сообщений: 1,078
13.11.2012, 17:05
Цитата Сообщение от Rito4ka Посмотреть сообщение
спасибо, это код на C#? а как сделать тоже самое на vb?
VB.NET
1
2
    Dim wc As New webclient
        wc.UploadFile(address as String,filename as String)
не?
0
5 / 2 / 0
Регистрация: 09.11.2012
Сообщений: 26
14.11.2012, 03:33  [ТС]
Цитата Сообщение от _Лёша_ Посмотреть сообщение
VB.NET
1
2
    Dim wc As New webclient
        wc.UploadFile(address as String,filename as String)
не?
тут нужно указать URL. но какой? к тому же как я писала в начале темы при закачке плагина передается рандомно генерируемый параметр.


Цитата Сообщение от hamele0n Посмотреть сообщение
Rito4ka, может поможет http://www.developerfusion.com... arp-to-vb/
да, помогло. но у меня вопрос. в коде есть вот такая вещь например:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
private void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
        {
            HtmlDocument doc = webBrowser1.Document;
            for (int i = 0; i < doc.Forms.Count; i++)
            {
                HtmlElement form = doc.Forms[i]; // must be declared inside the loop because there's a closure
                if (form.GetAttribute("enctype").ToLower() != "multipart/form-data") { continue; }
                
                form.AttachEventHandler("onsubmit", delegate(object o, EventArgs arg)
                    {
                        FormToMultipartPostData postData = new FormToMultipartPostData(webBrowser1, form);
                        postData.SetFile("file", @"C:\windows\win.ini");
                        postData.Submit();
                    });
                form.SetAttribute("hasBrowserHandler", "1"); // expose that we have a handler to JS
            }
        }
на vb это конвертируется как
VB.NET
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
   Private Sub WebBrowser_DocumentCompleted(ByVal sender As Object, ByVal e As WebBrowserDocumentCompletedEventArgs)
        Dim doc As HtmlDocument = WebBrowser.Document
        For i As Integer = 0 To doc.Forms.Count - 1
            ' must be declared inside the loop because there's a closure
            Dim form As HtmlElement = doc.Forms(i)
            If form.GetAttribute("enctype").ToLower() <> "multipart/form-data" Then
                Continue For
            End If
 
            form.AttachEventHandler("onsubmit", Sub(o As Object, arg As EventArgs)
                                                    Dim postData As New FormToMultipartPostData.FormToMultipartPostData(WebBrowser, form)
                                                    postData.SetFile("file", "C:\windows\win.ini")
                                                    postData.Submit()
 
                                                End Sub)
            ' expose that we have a handler to JS
            form.SetAttribute("hasBrowserHandler", "1")
        Next
    End Sub
так вот а как эта (этот) sub может запустится, если не написано, что обрабатывает этот sub, то есть в названии после Private Sub WebBrowser_DocumentCompleted(ByVal sender As Object, ByVal e As WebBrowserDocumentCompletedEventArgs) должно же идти Handles WebBrowser.DocumentCompleted
да?


и еще. в статье написано что вызов метода submit() на javascript-форме не запустит ивент onsubmit.
то есть предполагается, что форма загрузки файла сделана на javascript. извините, я его плохо знаю поэтому важно спросить: а в wordpress форма закачки плагинов сделана на javascript или без него? если что, то форма находится в /wp-admin/plugin-install.php?tab=upload обычно.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
14.11.2012, 03:33
Помогаю со студенческими работами здесь

Установка плагина в wordpress
Всем привет, у меня такой вопрос, есть блог на wordpress, есть плагин. Для его установки пишут необходимо залить его через ftp, я...

Перенос плагина с wordpress
Доброго времени суток господа! Может кто то уже проделывал такое или знает как это делается, буду рад любому совету. Итак, есть сайт на...

Поиск плагина WordPress
Приветствую. Подскажите, пожалуйста, за счёт чего реализован данный раздел на демке этого сайта (раздел &quot;блог&quot;) (см. вложение...

Проблема с установкой плагина на Wordpress
Пытаюсь установить плагин, делаю, как написано тут: http://mywordpress.ru/plugins/konstruktor-form-cforms-ii/2/ Я так понимаю, что после...

Настройки плагина bbpress (сайт на Wordpress)
На данный момент настраиваю сайт на Денвере (конечный результат не совсем ясен; не удастся посмотреть как простой пользователь). Возник...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru