Форум программистов, компьютерный форум, киберфорум
C# .NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 5.00/13: Рейтинг темы: голосов - 13, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 14.12.2013
Сообщений: 17
.NET 4.x

Переделать код, чтобы POST-запросы отправлялись последовательно в 1 поток

14.12.2013, 21:48. Показов 2758. Ответов 24
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Есть пример многопоточной отправки пост запросов через проски Чарлеса, нужно переделать чтобы запросы отправлялись последовательно в 1 поток
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
namespace bot
{
    public partial class Form1 : Form
    {
        readonly ParallelOptions o = new ParallelOptions();
        private Thread t;
        public Form1()
        {
            InitializeComponent();
        }
    private void button3_Click(object sender, EventArgs e)
        {
            t = new Thread(s_w);
            t.Start();
        }
 
        string send_POST(string url, string post)
        {
            string Response_POST = "", StrNewValue;
            try
            {
                HttpWebRequest req = (HttpWebRequest)WebRequest.Create(url);
                req.Method = "POST";
                req.Proxy = new WebProxy("127.0.0.1", 8888);
                req.ContentType = "application/x-www-form-urlencoded";
                StrNewValue = post;
                req.ContentLength = StrNewValue.Length;
                StreamWriter Soup = new StreamWriter(req.GetRequestStream(), System.Text.Encoding.ASCII);
                Soup.Write(StrNewValue);
                Soup.Close();
                StreamReader stin3 = new StreamReader(req.GetResponse().GetResponseStream());
                Response_POST = stin3.ReadToEnd();
                stin3.Close();
            }
            catch { }
            return Response_POST;
        }
 
        private void s_w()
        {
            o.MaxDegreeOfParallelism = Convert.ToInt32(numericUpDown1.Value);
            Parallel.ForEach(GetLine(), o,
                line => send_POST("http://game-r01vk.rjgplay.com/command/", line));
        }
 
        private void richTextBox1_TextChanged(object sender, EventArgs e)
        {
 
        }
        IEnumerable<string> GetLine()
        {
            string[] line = null;
            if (richTextBox1.InvokeRequired)
            {
                richTextBox1.Invoke(
                    new Action(() =>
                    {
                        line = richTextBox1.Text.Split('|');
                    }
                    ));
            }
            else
                line = richTextBox1.Text.Split('|');
            return line;
        }
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
14.12.2013, 21:48
Ответы с готовыми решениями:

Как сделать чтобы пост запросы отправлялись через определенное количество времени
Как сделать чтобы пост запросы отправлялись через определенное количество времени (к примеру 10 секунд) и каждый отправленный пост запрос...

Как изменить корзину Wicart, чтобы отправлялись сообщения покупателю
Добрый день. Я скачал скрипт корзины Wicart для интернет-магазина, и он работает. &lt;div...

Сделать так, чтобы пакеты не отправлялись с клиента если сервер не желает их принимать
Собственно,имеется сервер,который получает пакеты при определённых условиях и клиенты.Проблема в том,что пакеты с клиента отправляются если...

24
145 / 145 / 35
Регистрация: 04.06.2011
Сообщений: 578
15.12.2013, 08:49
C#
1
2
3
4
5
        private void s_w()
        {
            for(int i = 0; i < Convert.ToInt32(numericUpDown1.Value); i++)    
            send_POST("http://game-r01vk.rjgplay.com/command/", "post_parametrs");
        }
0
0 / 0 / 0
Регистрация: 14.12.2013
Сообщений: 17
15.12.2013, 12:41  [ТС]
Не все так просто:у меня "post_parametrs" - это текст ричтекстбокса, разбитый на список строк символом "|"
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
IEnumerable<string> GetLine()
        {
            string[] line = null;
            if (richTextBox1.InvokeRequired)
            {
                richTextBox1.Invoke(
                    new Action(() =>
                    {
                        line = richTextBox1.Text.Split('|');
                    }
                    ));
            }
            else
                line = richTextBox1.Text.Split('|');
            return line;
        }
0
145 / 145 / 35
Регистрация: 04.06.2011
Сообщений: 578
15.12.2013, 13:12
Скиньте весь проект. поправлю.
0
0 / 0 / 0
Регистрация: 14.12.2013
Сообщений: 17
15.12.2013, 17:37  [ТС]
Цитата Сообщение от Andrew_qb Посмотреть сообщение
Скиньте весь проект. поправлю.
Вложение
Вложения
Тип файла: rar Popravka.rar (39.6 Кб, 34 просмотров)
0
0 / 0 / 0
Регистрация: 14.12.2013
Сообщений: 17
18.12.2013, 14:12  [ТС]
Совсем никаких идей?
В принципе программа работает и на 1 поток
C#
1
  o.MaxDegreeOfParallelism = Convert.ToInt32(numericUpDown1.Value);
Но мне эта реализация не подходит,потому что запросы должны идти через UserAgent а не прокси чарлеса
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
private string post(string uri, string req)
        {
            string s = req;
            HttpWebRequest request = (HttpWebRequest)WebRequest.Create(uri);
            request.UserAgent = "Opera/9.80";
            request.Method = "POST";
            request.ContentType = "application/x-www-form-urlencoded";
            byte[] bytes = Encoding.ASCII.GetBytes(s);
            request.ContentLength = bytes.Length;
            request.GetRequestStream().Write(bytes, 0, bytes.Length);
            request.GetRequestStream().Close();
            HttpWebResponse response = (HttpWebResponse)request.GetResponse();
            return new StreamReader(response.GetResponseStream(), Encoding.UTF8).ReadToEnd();
По сути, задача сводится к тому,чтобы в "string req" поместить список сторк
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
IEnumerable<string> GetLine()
        {
            string[] line = null;
            if (richTextBox1.InvokeRequired)
            {
                richTextBox1.Invoke(
                    new Action(() =>
                    {
                        line = richTextBox1.Text.Split('|');
                    }
                    ));
            }
            else
                line = richTextBox1.Text.Split('|');
            return line;
        }
0
0 / 0 / 0
Регистрация: 14.12.2013
Сообщений: 17
03.01.2014, 23:17  [ТС]
Цитата Сообщение от Andrew_qb Посмотреть сообщение
Скиньте весь проект. поправлю.
Не знаете чем помочь или или неясна задача?
0
145 / 145 / 35
Регистрация: 04.06.2011
Сообщений: 578
03.01.2014, 23:24
чуть позже скину проект.
0
Кодогенератор
 Аватар для hepper
200 / 200 / 51
Регистрация: 15.06.2011
Сообщений: 794
04.01.2014, 18:09
мб так подойдет
Вложения
Тип файла: zip Popravka.zip (15.1 Кб, 4 просмотров)
0
0 / 0 / 0
Регистрация: 14.12.2013
Сообщений: 17
05.01.2014, 23:48  [ТС]
Отчасти помогло,запросы идут последовательно, но все-равно ошибка
У меня авторизация прописана так
Кликните здесь для просмотра всего текста
Code
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
   private void button1_Click_1(object sender, EventArgs e)
        {
            string text = this.send_POST("http://game-r01vk.rjgplay.com/command/", "<auth><auth_key>" + this.textBox2.Text + "</auth_key> <login>" + this.textBox1.Text + "</login></auth>");
            this.label1.Text = this.parse(text, "<sid>", "</sid");
            string text1 = this.send_POST("http://game-r01vk.rjgplay.com/command/", "<get_game_info sid=\"" + this.label1.Text + "\"/>");
            this.label2.Text = this.parse(text1, "<leader", "</leader");
            string text2 = this.send_POST("http://game-r01vk.rjgplay.com/command/", "<update sid=\"" + this.label1.Text + "\"/>");
        }
        string res;
        private string parse(string text, string ind1, string ind2)
        {
            res = "";
            string[] stringSeparators = new string[] { "\n" };
            string[] result = text.Split(stringSeparators, StringSplitOptions.RemoveEmptyEntries);
            foreach (string stroka in result)
            {
                if (stroka.IndexOf(ind1) != -1)
                {
                    string[] Moneyy = stroka.ToString().Split((Convert.ToChar(">")));
                    res = Moneyy[1].Replace(ind2, "");
                }
 
            }
 
            return res;
        }

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



Popravka.rar
0
Кодогенератор
 Аватар для hepper
200 / 200 / 51
Регистрация: 15.06.2011
Сообщений: 794
06.01.2014, 00:14
если метод отправки один и тот же, значит шлешь не то, или запросы/параметры из ричбокса не так парсятся... эт в отладчике надо уже смотреть. без правильных запросов ничем не помочь
0
0 / 0 / 0
Регистрация: 14.12.2013
Сообщений: 17
07.01.2014, 01:48  [ТС]
В том то и дело, что запросы вроде те.
Через браузер это выглядит так:
Кликните здесь для просмотра всего текста

меня только этот смущает, но он вроде не причем
Кликните здесь для просмотра всего текста
0
Кодогенератор
 Аватар для hepper
200 / 200 / 51
Регистрация: 15.06.2011
Сообщений: 794
07.01.2014, 20:12
вложения не открываются...
0
0 / 0 / 0
Регистрация: 14.12.2013
Сообщений: 17
08.01.2014, 01:07  [ТС]
В том то и дело, что запросы вроде те.
Через браузер это выглядит так:
Кликните здесь для просмотра всего текста

Этого у мяня нет, но вроде он не нужен
Кликните здесь для просмотра всего текста
0
Кодогенератор
 Аватар для hepper
200 / 200 / 51
Регистрация: 15.06.2011
Сообщений: 794
08.01.2014, 08:50
вот в таком виде шлет нормально и приходят правильные ответы.
Вложения
Тип файла: rar Popravka.rar (10.3 Кб, 6 просмотров)
1
0 / 0 / 0
Регистрация: 14.12.2013
Сообщений: 17
09.01.2014, 14:01  [ТС]
С этими параметрами запросы идут, ответ приходит.
Только теперь он требует чтобы у всей сессии был одинаковый sid
Кликните здесь для просмотра всего текста
...
<auth>
<sid>9dcd2d1ef818c8d9c3bd82b0d4e4790a</sid>
</auth>
...
<start_defence_session sid="d0d62139543bbf74f9064248fc036fab">
<type>kb_region_4_elf_m2_week_2_4</type>
</start_defence_session>
...

возвращает ошибку 101
Теперь нужно каждый раз менять сид во всех запросах или есть другой способ?
0
Кодогенератор
 Аватар для hepper
200 / 200 / 51
Регистрация: 15.06.2011
Сообщений: 794
09.01.2014, 20:17
Цитата Сообщение от sachokk3 Посмотреть сообщение
Теперь нужно каждый раз менять сид во всех запросах или есть другой способ?
sid и есть session ID - он меняется при каждом логине в игре насколько я понял, внутри сессии сид будет постоянным.
проверь порядок авторизации там помоему есть генерация сида, если сессию не прерывать сид не должен меняться
0
0 / 0 / 0
Регистрация: 14.12.2013
Сообщений: 17
09.01.2014, 20:31  [ТС]
Это я знаю,что сид получается при авторизации.Но те запросы, которые будут идти из ричбокса имеют другой сид, который каждый раз придется менять на сид текущей сессии
Вложения
Тип файла: txt БK_BK(1).txt (14.9 Кб, 4 просмотров)
0
Кодогенератор
 Аватар для hepper
200 / 200 / 51
Регистрация: 15.06.2011
Сообщений: 794
10.01.2014, 22:08
ну в таком виде бот ведь очень сырой.
по вопросу сида могу посоветовать следующее:
сделать еще текст бокс на форме, туда вначале ввести вручную чисто сид из тех запросов что будут в ричбоксе - в коде дописать строку, которая будет менять сид из текстбокса на правильный
0
0 / 0 / 0
Регистрация: 14.12.2013
Сообщений: 17
11.01.2014, 03:29  [ТС]
Цитата Сообщение от hepper Посмотреть сообщение
... дописать строку, которая будет менять сид из текстбокса на правильный
по поводу этой строки:
если в ричбоксе будут разные сиды?тогда текст бокс не поможет.
Нельзя как-нибудь спарсить сиды из ричбокса?Заменить труда не составит.

Добавлено через 4 часа 32 минуты
Хочу через RegExp
C#
1
string pattern = @"sid=\"" + "[a-z|0-9]{32}" + "\">";
sid="afcf83b17752720ea34afcfbd65407bf">
но что-то пока не получается.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
11.01.2014, 03:29
Помогаю со студенческими работами здесь

Переделать код, чтобы играть в консоли
Помогите убрать интерфейс чтобы можно было играть крестики нолики в консоли import java.awt.*; import java.awt.event.*; import...

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

Переделать код, чтобы в нем использовались функции
Помогите переделать код, чтобы в нем использовались функции.class Program { static void Main(string args) { ...

Переделать код, чтобы происходила запись в файл
Было задание: В столовой предлагается N комплексных обедов из Q блюд. Известна стоимость и калорийность каждого блюда. Сколько стоит самый...

Надо : Чтобы файлы из сетевой папки отправлялись в папку с сайта автоматом ?! Как это сделать?
Может какой то скрипт или ещё что-то надо закинуть в папку ?!


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Перемещение выделенных строк ТЧ из одного документа в другой
Maks 30.03.2026
Реализация из решения ниже выполнена на примере нетипового документа "ВыдачаОборудованияНаСпецтехнику" с единственной табличной частью "ОборудованиеИКомплектующие" разработанного в конфигурации КА2. . . .
Functional First Web Framework Suave
DevAlt 30.03.2026
Sauve. IO Апнулись до NET10. Из зависимостей один пакет, работает одинаково хорошо как в режиме проекта так и в интерактивном режиме. из сложностей - чисто функциональный подход. Решил. . .
Автоматическое создание документа при проведении другого документа
Maks 29.03.2026
Реализация из решения ниже выполнена на нетиповых документах, разработанных в конфигурации КА2. Есть нетиповой документ "ЗаявкаНаРемонтСпецтехники" и нетиповой документ "ПланированиеСпецтехники". В. . .
Настройка движения справочника по регистру сведений
Maks 29.03.2026
Решение ниже реализовано на примере нетипового справочника "ТарифыМобильнойСвязи" разработанного в конфигурации КА2, с целью учета корпоративной мобильной связи в коммерческом предприятии. . . .
Автозаполнение реквизита при выборе элемента справочника
Maks 27.03.2026
Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. При выборе "Спецтехники" (Тип Справочник. Спецтехника), заполняется. . .
Сумматор с применением элементов трёх состояний.
Hrethgir 26.03.2026
Тут. https:/ / fips. ru/ EGD/ ab3c85c8-836d-4866-871b-c2f0c5d77fbc Первый документ красиво выглядит, но без схемы. Это конечно не даёт никаких плюсов автору, но тем не менее. . . всё может быть. . .
Автозаполнение реквизитов при создании документа
Maks 26.03.2026
Программный код из решения ниже размещается в модуле объекта документа, в процедуре "ПриСозданииНаСервере". Алгоритм проверки заполнения реализован для исключения перезаписи значения реквизита,. . .
Команды формы и диалоговое окно
Maks 26.03.2026
1. Команда формы "ЗаполнитьЗапчасти". Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. В качестве источника данных. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru