0 / 0 / 0
Регистрация: 14.07.2015
Сообщений: 5

Отправить POST-запрос через Awesomium

24.07.2015, 14:42. Показов 3164. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте, господа!
Нужен пример отправки post запроса через Awesomium, например, по нажатию кнопки.
Есть url, на который нужно отправлять запрос и допустим поля login и password.
Как это реализовать?

Для примера что я имею ввиду - в WebBrowser это делается так:
C#
1
2
string data = "email=vasya&pass=123456789";
webBrowser1.Navigate("http://test1.ru/login.php", "_self", System.Text.Encoding.ASCII.GetBytes(data), "content-type:application/x-www-form-urlencoded");

Добавлено через 23 часа 41 минуту
Нашел решение!!!

1. Добавляем новый файл класса к проекту, называем его, например, CustomInterceptor.cs и вставляем в него это:
Кликните здесь для просмотра всего текста
C#
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
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
// CRI.CustomResourceInterceptor
//
//  Author:     Garison E Piatt
//  Contact:    {removed}
//  Created:    11/17/14
//  Version:    1.0.0
//
// Apparently, when Awesomium was first created, the programmers did not understand that someone would
// eventually want to post data from the application.  So they made it incredibly difficult to upload
// POST parameters to the remote web site.  We have to jump through hoops to get that done.
//
// This module provides that hoop-jumping in a simple-to-understand fashion.  We hope.  It overrides
// the current resource interceptor (if any), replacing both the OnRequest and OnFilterNavigation
// methods (we aren't using the latter yet).
//
// It also provides settable parameters.  Once this module is attached to the WebCore, it is *always*
// attached; therefore, we can simply change the parameters before posting to the web site.
//
// File uploads are currently unhandled, and, once handled, will probably only upload one file.  We
// will deal with that issue later.
//
// To incoroprate this into your application, follow these steps:
//  1.  Add this file to your project.  You know how to do that.
//  2.  Edit your MainWindow.cs file.
//      a.  At the top, add:
//              using CRI;
//      b.  inside the main class declaration, near the top, add:
//              private CustomResourceInterceptor cri;
//      c.  In the MainWindow method, add:
//              WebCore.Started += OnWebCoreOnStarted;
//              cri = new CustomResourceInterceptor();
//          and (set *before* you set the Source value for the Web Control):
//              cri.Enabled = true;
//              cri.Parameters = String.Format("login={0}&password={1}", login, pw);
//          (Choose your own parameters, but format them like a GET query.)
//      d.  Add the following method:
//              private void OnWebCoreOnStarted(object sender, CoreStartEventArgs coreStartEventArgs) {
//                  WebCore.ResourceInterceptor = cri;
//              }
//  3. Compile your application.  It should work.
 
using System;
using System.Runtime.InteropServices;
using System.Text;
using Awesomium.Core;
using Awesomium.Windows.Forms;
 
 
namespace CRI
{
    //*  CustomResourceInterceptor
    //  This object replaces the standard Resource Interceptor (if any; we still don't know) with something
    //  that allows posting data to the remote web site.  It overrides both the OnRequest and OnFilterNavigation
    //  methods.  Public variables allow for run-time configuration.
    public class CustomResourceInterceptor : IResourceInterceptor
    {
        // Since the default interceptor remains overridden for the remainder of the session, we need to disable
        // the methods herein unless we are actually using them.  Note that both methods are disabled by default.
        public bool RequestEnabled = false;
        public bool FilterEnabled = false;
 
        // These are the parameters we send to the remote site.  They are empty by default; another safeguard
        // against sending POST data unnecessarily.  Currently, both values allow for only one string.  POST
        // variables can be combined (by the caller) into one string, but this limits us to only one file
        // upload at a time.  Someday, we will have to fix that.  And make it backward-compatible.
        public String Parameters = null;
        public String FilePath = null;
 
        /** OnRequest
        ** This ovverrides the default OnRequest method of the standard resource interceptor.  It receives
        ** the resource request object as a parameter.
        **
        ** It first checks whether or not it is enabled, and returns NULL if not.  Next it sees if any 
        ** parameters are defined.  If so, it converst them to a byte stream and appends them to the request.
        ** Currently, files are not handled, but we hope to add that someday.
        */
        public ResourceResponse OnRequest(ResourceRequest request)
        {
            // We do nothing at all if we aren't enabled.  This is a stopgap that prevents us from sending
            // POST data with every request.
            if (RequestEnabled == false) return null;
 
            // If the Parameters are defined, convert them to a byte stream and append them to the request.
            if (Parameters != null)
            {
                var str = Encoding.Default.GetBytes(Parameters);
                var bytes = Encoding.UTF8.GetString(str);
 
                request.AppendUploadBytes(bytes, (uint)bytes.Length);
            }
 
            // If either the parameters or file path are defined, this is a POST request.  Someday, we'll
            // figure out how to get Awesomium to understand Multipart Form data.
            if (Parameters != null || FilePath != null)
            {
                request.Method = "POST";
                request.AppendExtraHeader("Content-Type", "application/x-www-form-urlencoded"); //"multipart/form-data");
            }
 
            // Once the data has been appended to the page request, we need to disable this process.  Otherwise,
            // it will keep adding the data to every request, including those that come from the web site.
            RequestEnabled = false;
            Parameters = null;
            FilePath = null;
 
            return null;
        }
 
 
        /** OnFilterNavigation
        ** Not currently used, but needed to keep VisualStudio happy.
        */
        public bool OnFilterNavigation(NavigationRequest request)
        {
            return false;
        }
    }
}


2. В основном классе добавляем
C#
1
using CRI;
и перед InitializeComponent(); добавляем

C#
1
2
WebCore.Started += OnWebCoreOnStarted;
            cri = new CustomResourceInterceptor();
3. далее в нашем классе вставляем объявленную функцию
C#
1
2
3
4
private void OnWebCoreOnStarted(object sender, CoreStartEventArgs coreStartEventArgs)
        {
            WebCore.ResourceInterceptor = cri;
        }
4. и там где нужно отправлять post-запрос делаем примерно так:
C#
1
2
3
cri.RequestEnabled = true;
cri.Parameters = String.Format("login={0}&password={1}", login, pw);
WebControl1.Source = new Uri(my_post_url); // где my_post_url - адрес, на который отправляются post-данные.
Всё отлично работает!
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
24.07.2015, 14:42
Ответы с готовыми решениями:

Как отправить файл через POST-запрос
как отправить файл через POST запрос?

Отправить post запрос на JSON
Всем привет , использую WebBrowser что бы отправлять пост запросы , и для сайта realty.mail.ru нужно отправить сюда ---...

Не получается отправить Post запрос
Есть сайт когда туда заходишь надо указать что тебе больше 18 и т.д. Хочу программно это сделать. Вот что просниффил: POST...

4
2 / 2 / 0
Регистрация: 15.05.2011
Сообщений: 50
08.05.2016, 18:47
Жалко что данное решение одноразовое, и делается перед (!)первым присвоением Source
0
0 / 0 / 0
Регистрация: 14.07.2015
Сообщений: 5
11.05.2016, 11:05  [ТС]
thefair, как раз таки нет. После отправки post-запроса RequestEnabled ставите в false и потом когда вам опять нужно отправить post-запрос выполняете шаг №4.

То есть RequestEnabled служит как раз флагом, говорящим Awesomium, что сейчас будем отправлять POST-запрос.
0
 Аватар для 1337trix
23 / 24 / 11
Регистрация: 04.12.2014
Сообщений: 422
22.04.2017, 14:52
Так понимаю тема уже закрыта, если поднял ее, без повода - извините.
Наткнулся на такой достаточно проблемный баг -
после запроса методом гет - последующий пост-запрос отправляется на какой-то корявый адрес(из содержимого прошлого запроса)
Например:
я отправил гет запрос вот так
C#
1
2
3
4
5
6
7
8
        string Get(string url)
        {
            cri.RequestEnabled = false;
            webControl1.Source = new Uri(url);
            while (webControl1.IsLoading)
                Application.DoEvents();
            return webControl1.HTML;
        }
Вроде адекватно все, но потом при последующей отправке POST-запроса, адрес запроса на который я отправляю меняется на внутренний(в моем случае на адрес картинки... мда, так со всеми сайтами)
Кто в курсе, что за прикол ? ковыряю уже третьи сутки, так понять не могу - сниффер показывает, что запрос летит на левый URL, не тот, что в коде я указывал...
0
 Аватар для Japanese
9 / 9 / 1
Регистрация: 14.11.2010
Сообщений: 148
26.04.2017, 14:16
А как ответ получить после отправки post?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
26.04.2017, 14:16
Помогаю со студенческими работами здесь

Отправить Post-запрос средствами XNet
Доброго суток всем. Проблема с отправлением post-запроса, средствами xNet. Нужно отправить заполненную форму, в формате: ...

Как отправить правильный POST запрос с помощью xNet?
Здравствуйте, столкнулся с проблемой которую решить еще не получилось, да и не встречал решений для xNet. Я использую библиотеку xNet для...

Как отправить POST запрос и проверить правильные ли данные
Добрый день! Мне необходимо посылать POST запрос на страницу "http://IP/login.php". Прослушал сниффером. В запросе передаются такие...

Отправить на сервер сначала GET-запрос, а затем POST, не закрывая соединения
Доброго времени суток! Подскажите, как можно отправить на сервер сначала get-запрос, а затем post, не закрывая соединения? Например, мне...

Необходимо перехватить ответ на post-запрос, отредактировать его, и отправить дальше
Ситуация такая пишу свой браузер, специфика задачи не позволяет использовать стандартные, необходимо перехватить ответ на post-запрос, там...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru