Форум программистов, компьютерный форум, киберфорум
C#: Web, ASP.NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.85/13: Рейтинг темы: голосов - 13, средняя оценка - 4.85
Эксперт .NET
 Аватар для Wolfdp
3781 / 1755 / 371
Регистрация: 15.06.2012
Сообщений: 6,516
Записей в блоге: 3

програмно ввести логин/пароль на другой сайт

29.07.2013, 00:45. Показов 2872. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Суть задачи в следующем:

Есть личный сайт, на который загружается некий материал. Нужно, после загрузки, перенести весь этот материал на другой сервис (dropbox.com). FTP нет. Для загрузки использую DropNet. После запроса ключей сеанса, нужно авторизоваться. В коде это выглядит так.

C#
1
2
3
4
5
6
7
8
9
10
11
DropNetClient dropboxClient;
var user = dropboxClient.GetToken();
dropboxClient.UseSandbox = true;
string url = dropboxClient.BuildAuthorizeUrl(redirect);
 
 
//далее нужно перейти по адрессу url и нажать кнопочку "разрешаю".
 
dropboxClient.GetAccessToken();
 
// и только после этого можно работать с сервисом.
Нужно автоматизировать этот процесс. Теоретически, нужно как-то отправить пост-запрос, но я вообще ноль в этом. Можно хотя бы один маленький пример?

P.S. Я понимаю, что всё это будет крутится на IIS и достаточно задать для DropNetClient dropboxClient; сингл-тон и выполнит один раз авторизацию. Но вполне возможно, что слетит сессия и придется ждать админа, который выполнит переподключение.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
29.07.2013, 00:45
Ответы с готовыми решениями:

Логин;пароль из txt
Есть txt в котором лежит список вида: логин0;пароль0 логин1;пароль1 и т.д. Небходимо использовать их (поочерёдно) в работе...

Авторизация пользователя. Как хранить логин и пароль
Всем добрый день! Наконец-то добралась до авторизации пользователя. Отсюда вопрос: Где и как хранить логины и пароли? хочется в файле...

Программная авторизация на сайте, зная свои логин и пароль
Здравствуйте. Как программно авторизоваться на сайте, например www.cyberforum.ru, зная свои логин и пароль. То есть, я в WebBrowser перешёл...

5
Эксперт .NET
 Аватар для Wolfdp
3781 / 1755 / 371
Регистрация: 15.06.2012
Сообщений: 6,516
Записей в блоге: 3
09.08.2013, 12:56  [ТС]

Не по теме:

И тишина...


Из личных попыток: создал простейший веб-проект (тупо кнопка + тексбокс) и уже на нем отрабатываю запросы. Не работает, что не так - не знаю (оба проекта прикрепил в архиве).

листинг веб-сайта

HTML5
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm.aspx.cs" Inherits="TestPostBackWeb.WebForm" %>
 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
        <asp:Literal ID="nyaLiteral" runat="server" />
        <br />
        <asp:TextBox ID="nyaTextBox" runat="server" />
        <br />
        <asp:Button ID="nyaButton" runat="server" Text="Nya!" 
            onclick="nyaButton_Click" />
    </div>
    </form>
</body>
</html>

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
using System;
using System.IO;
 
namespace TestPostBackWeb
{
    public partial class WebForm : System.Web.UI.Page
    {
        const string dataFile = @"C:\Users\Oleksandr\Nya\TestPostBackWeb\TestPostBackWeb\App_Data\DataFile.txt";
 
        protected void Page_Load(object sender, EventArgs e)
        {
            this.nyaLiteral.Text = File.ReadAllText(dataFile);
        }
 
        protected void nyaButton_Click(object sender, EventArgs e)
        {
            File.AppendAllText(dataFile, this.nyaTextBox.Text + "<br />");
            this.nyaLiteral.Text += this.nyaTextBox.Text + "<br />";
        }
    }
}
Листинг приложения, которое отправляет POST запрос

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
using System;
using System.Text;
using System.Net;
using System.IO;
using DropNet;
using System.Reflection;
 
namespace TestPostBack
{
    class Program
    {
        //private static string API_KEY = "sqvwogpm2mbyier";
        //private static string API_SECRET = "mblnb528uji8nm0";
 
        private static string FILE_RESULT = @"C:\Users\Oleksandr\Desktop\index.txt";
        private static string FILE_INDEX = @"C:\Users\Oleksandr\Desktop\result.txt";
        private static string FILE_RESPONSE = @"C:\Users\Oleksandr\Desktop\request.txt";
 
        static void Main(string[] args)
        {
            try
            {
                var result = Program.Get("http://localhost:5940/WebForm.aspx");
                result.DataString += "&nyaTextBox=HatsuneMiku&nyaButton=Nya%21";
                Console.WriteLine("Get!");
                Program.Post("http://localhost:5940/WebForm.aspx", result.DataString, result.Cookie);
                Console.WriteLine("Post!");
            }
            catch (Exception ex)
            {
                Console.WriteLine("Exception");
                Console.WriteLine(ex.Message);
            }
            finally
            {
                Console.ReadKey();
            }
        }
 
        static GetResult Get(string url)
        {
            GetResult result = new GetResult();
            var req = (HttpWebRequest)WebRequest.Create(url);
            var resp = req.GetResponse();
            Stream stream = resp.GetResponseStream();
            StreamReader sr = new StreamReader(stream);
            string outData = sr.ReadToEnd();
            //result.Cookie = ((HttpWebResponse)resp).Cookies;
            sr.Close();
            result.DataString = string.Empty;
            int i = outData.IndexOf("id=\"__VIEWSTATE\" value=\"") + "id=\"__VIEWSTATE\" value=\"".Length;
            int j = outData.IndexOf("\" />", i);
            result.DataString = "__VIEWSTATE=" + outData.Substring(i, j - i).Replace("/", "%2");
            i = outData.IndexOf("id=\"__EVENTVALIDATION\" value=\"") + "id=\"__EVENTVALIDATION\" value=\"".Length;
            j = outData.IndexOf("\" />", i);
            result.DataString += "&__EVENTVALIDATION=" + outData.Substring(i, j - i).Replace("/", "%2");
 
            File.WriteAllText(FILE_RESULT, outData);
            File.WriteAllText(FILE_INDEX, result.DataString);
 
            return result;
        }
 
        static void Post(string url, string data, CookieContainer cookie)
        {
            var req = (HttpWebRequest)WebRequest.Create(url);
            req.Host = "localhost:5940";
 
            req.Referer = "http://localhost:5940/WebForm.aspx";
            
 
            req.UserAgent = "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.1 (KHTML, like Gecko) Chrome/13.0.782.220 Safari/535.1";
            req.Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8";
            req.Headers.Add("Accept-Encoding", "gzip,deflate,sdch");
            req.Headers.Add("Accept-Language", "ru-RU,ru;q=0.8,en-US;q=0.6,en;q=0.4");
            req.Headers.Add("Cache-Control", "max-age=0");
            req.Headers.Add("Origin", "http://localhost:5940");
            req.Method = "POST";
            req.Timeout = 5000;
            req.ContentType = "application/x-www-form-urlencoded";
            //byte[] sentData = Encoding.GetEncoding(1251).GetBytes(data);
            byte[] sentData = Encoding.Unicode.GetBytes(data);
            req.ContentLength = sentData.Length;
 
            var nya = req.Headers.ToString();
 
            var sendStream = req.GetRequestStream();
            sendStream.Write(sentData, 0, sentData.Length);
            var response = req.GetResponse();
            var getStream = response.GetResponseStream();
            TextReader reader = new StreamReader(getStream);
            File.WriteAllText(FILE_RESPONSE, reader.ReadToEnd());
            getStream.Close();
            sendStream.Close();
        }
    }
 
    public struct GetResult
    {
        public string DataString;
        public CookieContainer Cookie;
    }
}
Пример запроса, вытянутый из Chrome

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
27
Request URL:http://localhost:5940/WebForm.aspx
Request Method:POST
Status Code:200 OK
Request Headersview parsed
POST /WebForm.aspx HTTP/1.1
Host: localhost:5940
Connection: keep-alive
Content-Length: 352
Cache-Control: max-age=0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Origin: http://localhost:5940
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1500.95 Safari/537.36
Content-Type: application/x-www-form-urlencoded
Referer: http://localhost:5940/WebForm.aspx
Accept-Encoding: gzip,deflate,sdch
Accept-Language: ru-RU,ru;q=0.8,en-US;q=0.6,en;q=0.4
Form Dataview parsed
__VIEWSTATE=%2FwEPDwULLTEyMTgwMTA4MTUPZBYCAgMPZBYCAgEPFgIeBFRleHQFTG5la288YnIgLz7QvdGPPGJyIC8%2B0L3RjzxiciAvPtC90Y88YnIgLz5ueWE8YnIgLz4xMjM8YnIgLz5uZWtvPGJyIC8%2BMzk8YnIgLz5kZCEmn0qqlWbAUObNxkE%2BkOHEKmVlLvGIn0kR8iW%2BVhIj&__EVENTVALIDATION=%2FwEWAwK8zdiEBwKPj9TrAgK%2BieDbDtnv8Ixkl1SejBL9h%2FtNPKKa2PTXQBY%2FU50huzHshsxT&nyaTextBox=39&nyaButton=Nya%21
Response Headersview parsed
HTTP/1.1 200 OK
Server: ASP.NET Development Server/10.0.0.0
Date: Fri, 09 Aug 2013 08:04:58 GMT
X-AspNet-Version: 4.0.30319
Cache-Control: private
Content-Type: text/html; charset=utf-8
Content-Length: 1122
Connection: Close
Вложения
Тип файла: zip TestPostBackWeb.zip (490.0 Кб, 3 просмотров)
0
 Аватар для sau
2773 / 2073 / 386
Регистрация: 22.07.2011
Сообщений: 7,820
09.08.2013, 15:08
Ну так с виду вроде все верно , сравни просто пакеты программы и браузера.
З.Ы Проще через WebClient-а постить: new WebClient().UploadData(params);
1
Эксперт .NET
 Аватар для Wolfdp
3781 / 1755 / 371
Регистрация: 15.06.2012
Сообщений: 6,516
Записей в блоге: 3
09.08.2013, 17:46  [ТС]
Цитата Сообщение от sau Посмотреть сообщение
сравни просто пакеты программы и браузера.
Чем и как, если не секрет?
Цитата Сообщение от sau Посмотреть сообщение
З.Ы Проще через WebClient-а постить: new WebClient().UploadData(params);
окей, попробую и этот вариант.
0
 Аватар для sau
2773 / 2073 / 386
Регистрация: 22.07.2011
Сообщений: 7,820
09.08.2013, 20:09
Любым снифером
0
Эксперт .NET
 Аватар для Wolfdp
3781 / 1755 / 371
Регистрация: 15.06.2012
Сообщений: 6,516
Записей в блоге: 3
10.08.2013, 01:48  [ТС]
Цитата Сообщение от sau Посмотреть сообщение
Любым снифером
Понятие не имею, что это такое. =)

Задача решена.

1 - вылавливал сообщения на серваке посредством перегрузки методов в глобале. Именно тут я и обратил внимание, что dataString от браузера несколько иной, чем от приложения. Сам же Headers, как оказалось, вообще мало что отыгрывал в данной ситуации.

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
protected void Application_BeginRequest(object sender, EventArgs e)
        {
            var global = sender as Global;
            if (global.Request.HttpMethod == "POST")
            {
                string nya = DateTime.Now.ToString("mm-ss") + ".txt";
                byte[] buff = new byte[1024];
                Stream stream = new FileStream(MASK_Data + nya, FileMode.Create);
                int count = global.Request.InputStream.Read(buff, 0, buff.Length);
                while (count > 0)
                {
                    stream.Write(buff, 0, count);
                    count = global.Request.InputStream.Read(buff, 0, buff.Length);
                }
                global.Request.InputStream.Position = 0;
                stream.Dispose();
                File.WriteAllText(MASK_Post + nya, global.Request.Headers.ToString());
            }
        }
2 - ошибкой было отправлять состояние страницы в чистом виде. Как оказалось, некоторые символы (а именно "равно", "слеш", "плюс") переводятся в псевдо-код.

C#
1
result = "__VIEWSTATE=" + input.Substring(i, j - i).Replace("/", "%2F").Replace("+", "%2B").Replace("=", "%3D");
3 - кодировка. Данные всё-таки нужно отсылать в формате UTF8.

После данных правок, что мой пример, что через WebClient всё заработало. Теперь осталось всё "перенести" на более сложную задачу. ^_^
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
10.08.2013, 01:48
Помогаю со студенческими работами здесь

Заставить контролл Login сравнивать логин и пароль с записями в базе
Доброго времени суток. Используя стандартный элемент управления Login не могу понять можно ли заставить Login сравнивать логин и пароль с...

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

Доступ к сетевой папке, указав логин и пароль удаленного пользователя
Приветствую. Столкнулся с таким вопросом - в сети есть папка, доступ к ней есть не у всех. Естественно, когда я обращаюсь к ней из...

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

Как авторизоваться на сайте зная логин и пароль используя класс WebClient
Здравствуйте, подскажите пожалуйста как можно авторизоваться на сайте зная логин и пароль к сайту используя класс WebClient ? т е какой...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
Новый ноутбук
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 . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
Фото: Daniel Greenwood
kumehtar 13.11.2025
Расскажи мне о Мире, бродяга
kumehtar 12.11.2025
— Расскажи мне о Мире, бродяга, Ты же видел моря и метели. Как сменялись короны и стяги, Как эпохи стрелою летели. - Этот мир — это крылья и горы, Снег и пламя, любовь и тревоги, И бескрайние. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru