Форум программистов, компьютерный форум, киберфорум
C# .NET
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.50/22: Рейтинг темы: голосов - 22, средняя оценка - 4.50
Эксперт .NET
4432 / 2092 / 404
Регистрация: 27.03.2010
Сообщений: 5,657
Записей в блоге: 1
1

Составить запрос для отправки на сервер, по инструкции

03.08.2012, 09:51. Показов 4120. Ответов 7
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Народ, помогите составить, вот как выглядит описание:
Адрес обращения : http://cabinet.blabla.ru/public/http/action.php

Формат входных данных :
Content-Type: application/x-www-form-urlencoded
Content-Charset: UTF-8

Тип авторизации : PLAIN (открытым текстом)
Метод отправки запроса : 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
    public class SomewhereSender
    {
        public void Authorize(string login, string password)
        {
            string xmlText = GetAuthorizationXml(login, password);
            Uri uri = new Uri("http://cabinet.blabla.ru/public/http/action.php");
            HttpWebRequest webRequest = (HttpWebRequest)WebRequest.Create(uri);
            webRequest.ContentType = "application/x-www-form-urlencoded";
            webRequest.Method = "POST";
            //Что тут дальше-то делать?
        }
 
        private string GetAuthorizationXml(string login, string password)
        {
            using (MemoryStream ms = new MemoryStream())
            {
                XmlTextWriter writer = new XmlTextWriter(ms, Encoding.UTF8);
                writer.WriteStartElement("xml_user");
                writer.WriteAttributeString("lgn", login);
                writer.WriteAttributeString("pwd", password);
                writer.WriteEndElement();
                writer.Close();
                UTF8Encoding enc = new UTF8Encoding();
                return enc.GetString(ms.ToArray());
            }
        }
    }
Как дальше отправлять запрос? Нужно авторизоваться отправляя xmlText.
Как описать тип авторизации PLAIN и Content-Charset: UTF-8?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
03.08.2012, 09:51
Ответы с готовыми решениями:

Soap запрос на сервер для отправки данных
Добрый день! В программировании не силен, рассчитываю на вашу помощь!!! Нужно отправлять данные на...

Soap запрос на сервер для отправки данных
Добрый день! В программировании не силен, рассчитываю на вашу помощь!!! Нужно отправлять данные на...

Сформировать post запрос для отправки файла на сервер
Задача следующая. Есть web-сервер, на который необходимо отправить файл. Для этого необходимо...

Как правильно составить пост запрос? Для отправки сообщения в чат
Доброго времени суток! Собственно вот мой String request =...

7
56 / 56 / 14
Регистрация: 06.04.2012
Сообщений: 185
03.08.2012, 12:40 2
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
            string query = "ваш запрос";
            byte[] queryArr = Encoding.Default.GetBytes(post);
            CookieContainer cookieContainer = new CookieContainer();
            webRequest = (HttpWebRequest)WebRequest.Create(targetSite);
            if (proxyAddr.Length > 8) webRequest.Proxy = new WebProxy(proxyAddr);// тут у меня на вход идет строка прокси - Х.Х.Х.Х:YY
            webRequest.CookieContainer = cookieContainer;
            webRequest.Method = "POST";
            webRequest.UserAgent = "юзерагент какой вам нравится";
            webRequest.Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8";
            webRequest.ContentType = "application/x-www-form-urlencoded";
            webRequest.Referer = "возможно понадобится реферер указывать";
            webRequest.ContentLength = queryArr.Length;
            webRequest.GetRequestStream().Write(queryArr, 0, queryArr.Length);
            HttpWebResponse webResponse = (HttpWebResponse)webRequest.GetResponse();
            StreamReader sr = new StreamReader(resp.GetResponseStream());
            string response = sr.ReadToEnd();
1
Эксперт .NET
4432 / 2092 / 404
Регистрация: 27.03.2010
Сообщений: 5,657
Записей в блоге: 1
03.08.2012, 13:18  [ТС] 3
Спасибо конечно, но меня интересует, а что делать с:
Тип авторизации : PLAIN (открытым текстом)
И где указывать:
Content-Charset: UTF-8
0
56 / 56 / 14
Регистрация: 06.04.2012
Сообщений: 185
03.08.2012, 13:50 4
Не могу утверждать наверняка, но вроде-бы достаточно такого -
C#
1
byte[] queryArr = Encoding.UTF8.GetBytes(post);
на такое в заголовке ответа от сервера - "Content-Type text/html; charset=UTF-8"
а для Тип авторизации : PLAIN (открытым текстом) - указать в самом запросе просто текст, есть же еще вариант - Uri.EscapeUriString("ваш запрос")
Или же вам понадобится что-то такое
http://msdn.microsoft.com/en-u... tials.aspx - но это для базовой аутентефикации(еще не приходилось использовать)
1
1274 / 975 / 113
Регистрация: 12.01.2010
Сообщений: 1,971
03.08.2012, 14:25 5
Цитата Сообщение от Casper-SC Посмотреть сообщение
И где указыватьContent-Charset: UTF-8
В заголовках
C#
1
webRequest.Headers.Add(HttpWebRequestHeader. ...., "utf8)
логично же вроде
ну и естественно сами данные должны быть в utf-8
1
2735 / 2041 / 380
Регистрация: 22.07.2011
Сообщений: 7,731
03.08.2012, 15:08 6
хм. что за тип авторизации такой ? - знаю что есть тип содержимого text/plain что означает простой текст.
В рамках http протокола для аутентификации предусмотрено только одно поле - Authorization, значение которого - схема логин пароль, возможно в формате base64 (возможны и другие значения. но на практике не используются). Все другие способы аутентификации - надстройки над http протоколом.
http://www.ietf.org/rfc/rfc2617.txt

C#
1
2
HttpWebRequest request = (HttpWebRequest)WebRequest.Create("url-here");
request.Credentials = new NetworkCredential("username", "password");
или так
C#
1
2
byte[] authBytes = Encoding.UTF8.GetBytes("user:password".ToCharArray()); 
request.Headers["Authorization"] = "Basic " + Convert.ToBase64String(authBytes);
1
Эксперт .NET
4432 / 2092 / 404
Регистрация: 27.03.2010
Сообщений: 5,657
Записей в блоге: 1
03.08.2012, 19:04  [ТС] 7
Спасибо всем за помощь, у каждого что-то помогло. Это XML протокол (так написано на сайте сервиса, с которым я взаимодействую).
В общем получилось так, всё работает (некоторые части кода переименованы, в реале я такие тупые названия не использую):

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
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml;
using System.IO;
using System.Net;
 
namespace Wpf_Sender
{
    public class SomewhereSender
    {
        public string Send(string login, string password, IList<XXX> somethingList, int ttl)
        {
            if (somethingList.Count > 250)
                throw new ArgumentOutOfRangeException("somethingList не может содержать больше 250 элементов");
            
            string xmlText = GetConfiguredXml(login, password, somethingList, ttl);
            Uri uri = new Uri("http://cabinet.blabla.ru/public/http/action.php");
            HttpWebRequest webRequest = (HttpWebRequest)WebRequest.Create(uri);
            webRequest.ContentType = "application/x-www-form-urlencoded";
            webRequest.Method = "POST";
            webRequest.Headers.Add(HttpRequestHeader.ContentEncoding, "UTF-8"); //!!!
            byte[] postHeaderBytes = Encoding.UTF8.GetBytes(xmlText);
            string text = null; //знаю, лишнее, просто не до конца класс доведён до ума
            using (Stream reqStream = webRequest.GetRequestStream())
            {
                reqStream.Write(postHeaderBytes, 0, postHeaderBytes.Length);
                HttpWebResponse webResponse = (HttpWebResponse)webRequest.GetResponse();
                using (StreamReader sr = new StreamReader(webResponse.GetResponseStream()))
                    text = sr.ReadToEnd();
            }
            return text;
        }
 
        private string GetConfiguredXml(string login, string password, IList<XXX> somethingList, int ttl)
        {
            using (MemoryStream ms = new MemoryStream())
            {
                XmlDocument doc = new XmlDocument();
                //-------
                //Составляем Xml документ
                //-------
                doc.Save(ms);
                UTF8Encoding enc = new UTF8Encoding();
                return enc.GetString(ms.ToArray());
            }
        }
    }
}
1
3 / 3 / 2
Регистрация: 16.11.2012
Сообщений: 54
14.04.2015, 15:51 8
Цитата Сообщение от Casper-SC Посмотреть сообщение
Спасибо всем за помощь, у каждого что-то помогло. Это XML протокол (так написано на сайте сервиса, с которым я взаимодействую).
В общем получилось так, всё работает (некоторые части кода переименованы, в реале я такие тупые названия не использую):
Был бы очень благодарен за хотя бы абстрактную часть другой стороны (.php) скрипта. У меня очень похожая задача
0
14.04.2015, 15:51
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
14.04.2015, 15:51
Помогаю со студенческими работами здесь

Сервер для отправки зашифрованных данных
Доброго времени суток! Задача была поставлена такая. Написать приложение сервер/клиент, сервер...

Зашифровать данные для отправки на сервер
Нужен алгоритм шифровки для отправки на сервер, и еще алгоритм дешифровки на php)

Php-скрипт для отправки данных на сервер
Добрый день, в php профан, не получается сделать никак по заданию. часть сделал, другую никак....

Переделать программу для отправки файла на сервер
Option Explicit Sub FTPFile() On Error GoTo Err_FTPFile Dim sHost As String Dim...

Конвертация img в данные для отправки на сервер
Всем привет, сразу прошу прошения, если ошибся разделом) В общем вопрос в чем: есть изображенька...

Как преобразовать массив в JSON для отправки на сервер?
ребят помогите пожалуйста разобраться с json encode нужно перевести массив в json encode для...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru