Форум программистов, компьютерный форум, киберфорум
C#: API, боты
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
 Аватар для chaleureux
25 / 28 / 19
Регистрация: 24.12.2014
Сообщений: 1,260

Соединение в PasteBin обрывается

27.04.2020, 18:52. Показов 990. Ответов 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
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
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
using System;
using System.Collections.Specialized;
using System.IO;
using System.Net;
 
namespace PasteBin
{
    class PasteBinClient
    {
        private const string _apiPostUrl = "http://pastebin.com/api/api_post.php";
        private const string _apiLoginUrl = "http://pastebin.com/api/api_login.php";
 
        private readonly string _apiDevKey;
        private string _userName;
        private string _apiUserKey;
 
        public PasteBinClient(string apiDevKey)
        {
            if (string.IsNullOrEmpty(apiDevKey))
                throw new ArgumentNullException("apiDevKey");
            _apiDevKey = apiDevKey;
        }
 
        public string UserName
        {
            get { return _userName; }
        }
 
        public void Login(string userName, string password)
        {
            if (string.IsNullOrEmpty(userName))
                throw new ArgumentNullException("userName");
            if (string.IsNullOrEmpty(password))
                throw new ArgumentNullException("password");
 
            var parameters = GetBaseParameters();
            parameters[ApiParameters.UserName] = userName;
            parameters[ApiParameters.UserPassword] = password;
 
            WebClient client = new WebClient();
            byte[] bytes = client.UploadValues(_apiLoginUrl, parameters);
            string resp = GetResponseText(bytes);
            if (resp.StartsWith("Bad API request"))
                throw new PasteBinApiException(resp);
 
            _userName = userName;
            _apiUserKey = resp;
        }
 
        public void Logout()
        {
            _userName = null;
            _apiUserKey = null;
        }
 
        public string Paste(PasteBinEntry entry)
        {
            if (entry == null)
                throw new ArgumentNullException("entry");
            if (string.IsNullOrEmpty(entry.Text))
                throw new ArgumentException("The paste text must be set", "entry");
 
            var parameters = GetBaseParameters();
            parameters[ApiParameters.Option] = "paste";
            parameters[ApiParameters.PasteCode] = entry.Text;
            SetIfNotEmpty(parameters, ApiParameters.PasteName, entry.Title);
            SetIfNotEmpty(parameters, ApiParameters.PasteFormat, entry.Format);
            SetIfNotEmpty(parameters, ApiParameters.PastePrivate, entry.Private ? "1" : "0");
            SetIfNotEmpty(parameters, ApiParameters.PasteExpireDate, FormatExpireDate(entry.Expiration));
            SetIfNotEmpty(parameters, ApiParameters.UserKey, _apiUserKey);
 
            WebClient client = new WebClient();
            byte[] bytes = client.UploadValues(_apiPostUrl, parameters);
            string resp = GetResponseText(bytes);
            if (resp.StartsWith("Bad API request"))
                throw new PasteBinApiException(resp);
            return resp;
 
        }
 
        private static string FormatExpireDate(PasteBinExpiration expiration)
        {
            switch (expiration)
            {
                case PasteBinExpiration.Never:
                    return "N";
                case PasteBinExpiration.TenMinutes:
                    return "10M";
                case PasteBinExpiration.OneHour:
                    return "1H";
                case PasteBinExpiration.OneDay:
                    return "1D";
                case PasteBinExpiration.OneMonth:
                    return "1M";
                default:
                    throw new ArgumentException("Invalid expiration date");
            }
        }
 
        private static void SetIfNotEmpty(NameValueCollection parameters, string name, string value)
        {
            if (!string.IsNullOrEmpty(value))
                parameters[name] = value;
        }
 
        private NameValueCollection GetBaseParameters()
        {
            var parameters = new NameValueCollection();
            parameters[ApiParameters.DevKey] = _apiDevKey;
 
            return parameters;
        }
 
        private static string GetResponseText(byte[] bytes)
        {
            using (var ms = new MemoryStream(bytes))
            using (var reader = new StreamReader(ms))
            {
                return reader.ReadToEnd();
            }
        }
 
        private static class ApiParameters
        {
            public const string DevKey = "api_dev_key";
            public const string UserKey = "api_user_key";
            public const string Option = "api_option";
            public const string UserName = "api_user_name";
            public const string UserPassword = "api_user_password";
            public const string PasteCode = "api_paste_code";
            public const string PasteName = "api_paste_name";
            public const string PastePrivate = "api_paste_private";
            public const string PasteFormat = "api_paste_format";
            public const string PasteExpireDate = "api_paste_expire_date";
        }
    }
 
    public class PasteBinApiException : Exception
    {
        public PasteBinApiException(string message)
            : base(message)
        {
        }
    }
 
    public class PasteBinEntry
    {
        public string Title { get; set; }
        public string Text { get; set; }
        public string Format { get; set; }
        public bool Private { get; set; }
        public PasteBinExpiration Expiration { get; set; }
    }
 
    public enum PasteBinExpiration
    {
        Never,
        TenMinutes,
        OneHour,
        OneDay,
        OneMonth
    }
}
Если использовать напрямую соединение и отправку то всё работает:

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
   string apiKey = "<your api key>";
   var client = new PasteBinClient(apiKey);
 
   // Опционально, без авторизации отправится анонимно
   client.Login(userName, password);
 
   var entry = new PasteBinEntry
   {
       Title = "PasteBin client test",
       Text = "Console.WriteLine(\"Hello PasteBin\");",
       Expiration = PasteBinExpiration.OneDay,
       Private = true,
       Format = "csharp"
   };
 
   string pasteUrl = client.Paste(entry);
Но как мне сделать чтобы авторизация держалась? К примеру на одну кнопку я хочу авторизоваться, а дальше отправить данные по другой кнопке:

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
// Кнопка подключения к серверу
private void Connect_Click(object sender, System.EventArgs e)
{
   client = new PasteBinClient(this.TextBox1.Text);
   MessageBox.Show("Подключены");
}
 
// Кнопка отправки данных на сервер
private void Send_Click(object sender, System.EventArgs e)
{
   // client = new PasteBinClient(this.TextBox1.Text);
    var entry = new PasteBinEntry
    {
        Title = "PasteBin client test",
        Text = "Console.WriteLine(\"Hello PasteBin\");",
        Expiration = PasteBinExpiration.OneDay,
        Private = true,
        Format = "csharp"
    };
 
    string result = client.Paste(entry); // Тут ошибка подключения ( если не напрямую делать подключение )
    MessageBox.Show(result);
}
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
27.04.2020, 18:52
Ответы с готовыми решениями:

Socket TCP: обрывается соединение после первого сообщения
Всем привет! Начал учить сокеты, написал по примере первую программу: клиент и сервер на TCP сокетах. Клиент подключается к серверу,...

Обрывается wi-fi соединение
Доброго времени суток! Такая простая и непонятная проблема: обрывается wi-fi соединение.Повторно подключится не могу, только...

Обрывается соединение LAN
Приобрели новый компьютер с предустановленной win7 x64. Проц - двухъядерный pentium g3220 3GHz ОЗУ - 4ГБ МАТЪ! - серии Asus H81M ...

1
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18257 / 14182 / 5366
Регистрация: 17.03.2014
Сообщений: 28,870
Записей в блоге: 1
28.04.2020, 14:46
Цитата Сообщение от chaleureux Посмотреть сообщение
Но как мне сделать чтобы авторизация держалась? К примеру на одну кнопку я хочу авторизоваться, а дальше отправить данные по другой кнопке:
Она и должна держаться, но ты почему-то забыл вызвать метод Login
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
28.04.2020, 14:46
Помогаю со студенческими работами здесь

Обрывается интернет-соединение Wi-fi
Добрый день! Ситуация в следующем. Настроен роутер D-link DIR-300. Периодически (примерно раз в 15 минут) инет-соединение обрывается и...

Постоянно обрывается соединение
Здравствуйте! Дома мой комп подключен через провод к ADSL-роутеру, другой (не мой) компьютер дома подключается к этому же роутеру через...

Обрывается соединение с интернетом
Здравствуйте товарищи. У меня проблема,и к сожалению определенного ее решения в интернете я не нашел,и решил обратится за помощью к вам....

периодически обрывается Wi-Fi соединение!
Дело вот в чём, имеется DSL модем, к нему подключен Wi-Fi роутер D-Link DIR615, к нему основной комп и ещё два подсоединяются через Wi-Fi....

Все время обрывается соединение
Здравствуйте! У меня стоит ОС Windows 7. Компьютер подключается через провод к ADSL Router DSL-2640U, подключение динамическое. ...


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

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Новые блоги и статьи
Первый деплой
lagorue 16.01.2026
Не спеша развернул своё 1ое приложение в kubernetes. А дальше мне интересно создать 1фронтэнд приложения и 2 бэкэнд приложения развернуть 2 деплоя в кубере получится 2 сервиса и что-бы они. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит токи на L и напряжения на C в установ. режимах до и. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Изучаю kubernetes
lagorue 13.01.2026
А пригодятся-ли мне знания kubernetes в России?
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru