PDA

Просмотр полной версии : Отправка данных qso на EQSL.CC c#



UZ5DM
07.06.2018, 21:30
Привет всем !
Подскажите как отправить данные на eqsl.cc используя C#
Что использовать для авторизации и для отправки данных ?

Спасибо
С уважением...

UA3AKI
08.06.2018, 06:02
а что такое C#

UA3AKI
08.06.2018, 06:08
И ещё - я такой позывной нигде не нашел. Фантом какой-то.

RX4CD
08.06.2018, 06:12
Подскажите как отправить данные на eqsl.cc используя C#
Что использовать для авторизации и для отправки данных ?

Т.е., как авторизоваться и пользоваться сервисом e-QSL?

UA3AKI
08.06.2018, 11:04
Сергей, мне кажется, что это какой-то "прикол". Достаточно зайти на сервер eQSL.cc и прочитать. Там есть и регистрация и прочее. Тролль какой-то... Пусть включает мозги для самостоятельных действий.

RM1F
08.06.2018, 11:20
Наверное, Uri, HttpWebRequest и HttpWebResponse, нет?

UA3AKI
08.06.2018, 12:47
Наверное, Uri, HttpWebRequest и HttpWebResponse, нет?
Вы про что?

UA3RMB
08.06.2018, 12:51
мне кажется, что это какой-то "прикол"
от почитателя альтернативных ОС.

R9CD
08.06.2018, 13:34
Видимо UZ5DM пишет какую-то программу - аппаратный журнал на языке программирования C# (си + +).

RA1QEA
08.06.2018, 13:50
… Фантом какой-то. ...

Плохо ищете «фантомы».

https://uz5dm.io.ua/


… Тролль какой-то...

Вот ваши сообщения, не несущие ничего для коллеги Влада (UZ5DM), и есть троллинг.

Влад, на сайте eqsl.cc есть возможность переключения страниц на русский язык.


...Тролль какой-то ... Пусть включает мозги для самостоятельных действий.

Как пренебрежительно Вы отозвались о коллеге. А если о Вас так скажут? Понравится?

US-E-12
08.06.2018, 14:14
На страничке Programming (http://www.eqsl.cc/qslcard/programming.cfm) есть всё необходимое описание для программистов для работы с данным сервисом.

UZ5DM
09.06.2018, 19:48
а что такое C# :s7:

UZ5DM
09.06.2018, 19:49
Видимо UZ5DM пишет какую-то программу - аппаратный журнал на языке программирования C# (си + +).

Совершенно верно !

UZ5DM
09.06.2018, 19:56
Сергей, мне кажется, что это какой-то "прикол". Достаточно зайти на сервер eQSL.cc и прочитать. Там есть и регистрация и прочее. Тролль какой-то... Пусть включает мозги для самостоятельных действий.

Если бы это сказал кто то из другого города России - я б еще удивился. А что ждать от "москвича" ? Человека далекого от того что есть другие люди, которые не живут в Москве.
Да простят меня уважаемые модераторы данного раздела - не по теме пишу. Простите. Просто не приятно стало...
C# не знает что такое - зато знает модное слово "тролль" :s10:
Теперь по теме:
Авторизация написана - все работает. Просто нужно мне знать как отравить мне данные. И сколько их отправлять:
Дата
Время
Callsign
Band
Я думаю что это основное .

UZ5DM
09.06.2018, 19:58
Наверное, Uri, HttpWebRequest и HttpWebResponse, нет?

Да я это использовал

US-E-12
09.06.2018, 21:17
И сколько их отправлять:
Дата
Время
Callsign
Band
Я думаю что это основное .
Отправляются данные в adif. Пример такого adif тоже есть на страничке programming.
Минимум необходимых полей

<QSO_DATE:8>20000409 <TIME_ON:4>1130 <CALL:6>WB4WXX <BAND:3>20M <MODE:3>SSB <RST_SENT:2>57 <EOR>

UZ5DM
09.06.2018, 21:37
Отправляются данные в adif. Пример такого adif тоже есть на страничке programming.
Минимум необходимых полей

То есть нужно сформировать данные как строку (в формате adif) ?

UZ5DM
09.06.2018, 21:40
И ещё - я такой позывной нигде не нашел. Фантом какой-то.

Это точно - 212711

US-E-12
09.06.2018, 22:53
То есть нужно сформировать данные как строку (в формате adif) ?
Да, включая header adif и по одной, так сказано в рекомендациях.

UZ5DM
10.06.2018, 07:42
То есть вот эти строки
<PROGRAMID:10>UR5EQF_log
<PROGRAMVERSION:7>3.31-61
<ADIF_VER:3>2.0
нужно включить а потом <QSO_DATE:8>20000409 <TIME_ON:4>1130 <CALL:6>WB4WXX <BAND:3>20M <MODE:3>SSB <RST_SENT:2>57 <EOR>

Я правильно понимаю ?

R9CD
10.06.2018, 08:47
Через программу не передавал, загружаю данные на сайты adif файлом в таком виде:

<QSO_DATE:8>20180610<TIME_ON:4>0540<CALL:6>WB4WXX<BAND:3>20M<MODE:3>SSB<RST_SENT:2>57<RST_RCVD:2>59<FREQ:9>14.000000<EOR>

Без заголовка и каждая связь в одной строке. Данные записаны без пробелов. Для eQSL teg FREQ не нужен - точную частоту они не указывают, но нужен для других сайтов.

Также и RST_RCVD - не отображается, но если присутствует в данных, то не мешает, просто игнорируется сайтом.

UZ5DM
10.06.2018, 10:08
Я хочу в своей программе по окончанию qso передавать данные на eqsl.cc
А то как залить на eqsl.cc adif file - это без проблем. Я формирую и читаю adif (на c#) без проблем
Меня интересует только как передать данные текущего qso

US-E-12
10.06.2018, 10:47
Я хочу в своей программе по окончанию qso передавать данные на eqsl.cc
Метод POST
Отправка данных

'http://www.eqsl.cc/qslcard/ImportADIF.cfm?'ADIFData=UR5EQF_log3 <EOH><OPERATOR:4>UR1E<CALL:6>UV5EUE<QSO_DATE:8>20180610<TIME_ON:4>0704<FREQ:2>28<MODE:3>FT8<RST_SENT:2>13<RST_RCVD:3>-15<BAND:3>10M<QSLMSG:37>You WKD with RW4LMR . PSE QSL TU 73!.<EOR>&eQSL_User=Login&eQSL_Pswd=Password
Url взял в комы, чтобы отобразился адрес. При отправке их ставить не надо.
В ответ получите сколько добавлено QSO или как у меня дубликат

Warning: Y=2018 M=06 D=10 UV5EUE 10M FT8 Bad record: Duplicate
Result: 0 out of 1 records added

UZ5DM
10.06.2018, 11:05
Метод POST
Отправка данных

Url взял в комы, чтобы отобразился адрес. При отправке их ставить не надо.
В ответ получите сколько добавлено QSO или как у меня дубликат

Спасибо большое !!!

UZ5DM
10.06.2018, 19:34
Делаю так :
string Auth = send("https://www.eqsl.cc/QSLCard/LoginFinish.cfm", string.Format("Callsign={0}&EnteredPassword={1}&Login=Go", Login.Text, Password.Text)); // авторизация прошла

вызываю передачу данных:
SendQso();

public void SendQso()
{
string myUrl = "http://www.eqsl.cc/qslcard/ImportADIF.cfm?";
var request = (HttpWebRequest)WebRequest.Create(myUrl);

var postData = "<EOH><OPERATOR:4>UR1E<CALL:6>UV5EUE<QSO_DATE:8>201 80610<TIME_ON:4>0704<FREQ:2>28<MODE:3>FT8<RST_SENT :2>13<RST_RCVD:3>-15<BAND:3>10M<QSLMSG:37>You WKD with RW4LMR . PSE QSL TU 73!.<EOR>&eQSL_User=uz5dm&eQSL_Pswd=********";
//postData += "&thing2=world";
var data = Encoding.ASCII.GetBytes(postData);

request.Method = "POST";
request.ContentType = "application/x-www-form-urlencoded";
request.ContentLength = data.Length;

using (var stream = request.GetRequestStream())
{
stream.Write(data, 0, data.Length);
}

var response = (HttpWebResponse)request.GetResponse();

var responseString = new StreamReader(response.GetResponseStream()).ReadToEnd();
textBox2.Text = responseString; // смотрю что ответил сервер
}

Ошибка Удаленный сервер возвратил ошибку: (400) Недопустимый запрос.
Что я не правильно делаю ?

US-E-12
10.06.2018, 19:51
авторизация прошла
При отправке авторизация не нужна. В запрос уже включены логин и пароль.


var data = Encoding.ASCII.GetBytes(postData);
Перекодировка в UTF8 - var data = Encoding.UTF8.GetBytes(postData);

UZ5DM
10.06.2018, 21:14
Я исправил

public void SendQso()
{
string myUrl = "http://www.eqsl.cc/qslcard/ImportADIF.cfm?";
var request = (HttpWebRequest)WebRequest.Create(myUrl);

string postData = "<EOH><OPERATOR:4>UR1E<CALL:6>UV5EUE<QSO_DATE:8>201 80610<TIME_ON:4>0704<FREQ:2>28<MODE:3>FT8<RST_SENT :2>13<RST_RCVD:3>-15<BAND:3>10M<QSLMSG:37>You WKD with RW4LMR . PSE QSL TU 73!.<EOR>&eQSL_User="+Login.Text+"&eQSL_Pswd="+Password.Text;
//postData += "&thing2=world";
var data = Encoding.UTF8.GetBytes(postData);

request.Method = "POST";
request.ContentType = "application/x-www-form-urlencoded";
request.ContentLength = data.Length;

using (var stream = request.GetRequestStream())
{
stream.Write(data, 0, data.Length);
}

var response = (HttpWebResponse)request.GetResponse();

var responseString = new StreamReader(response.GetResponseStream()).ReadToEnd();
textBox2.Text = responseString;
}

Удаленный сервер возвратил ошибку: (400) Недопустимый запрос.

US-E-12
10.06.2018, 23:34
Поставте какой-нибудь web debugging, к примеру Fiddler Free (https://www.telerik.com/fiddler) и посмотрите, что Вы отправляете по сети сервису, похоже это на запрос.

Можно попробывать отправить массив

// переводим данные в массив байтов
byte[] d = Encoding.UTF8.GetBytes(postData);
// устанавливаем длинну данных для запроса
request.ContentLength = d.Length;
stream = request.GetRequestStream();
// собственно отправляем запрос
stream.Write(d, 0, d.Length);

RX4HX
11.06.2018, 14:16
request.ContentType = "application/x-www-form-urlencoded";

Content-Type: multipart/form-data;

по этому и не верный.
Вы используете сторонний компонет - а он шлет непонятно что...

Лично моя рекомендация: если действительно хотите написать что-то стоящее, то работу с Интернетом нужно писать самому на WinAPI - благо по этому вопросу в инете информации много и не сложно.
Плюс потом ведь захотите на LoTW отправлять?))) А там свои нюансы.
Это существенно проще, чем в сторонних компонентах разбираться.

... Да и еще - шлете по 1 QSO в режиме реального времени? Если да, то не multipart/form-data;
а в Адиф добавляете
&eQSL_User=<USER>&eQSL_Pswd=<PASS>& ?

US-E-12
11.06.2018, 15:30
Нет параметра

string postData = "ADIFData=<EOH><OPERATOR:4>UR1E<CALL:6>UV5EUE<QSO_DATE:8>20 1 80610<TIME_ON:4>0704<FREQ:2>28<MODE:3>FT8<RST_SENT :2>13<RST_RCVD:3>-15<BAND:3>10M<QSLMSG:37>You WKD with RW4LMR . PSE QSL TU 73!.<EOR>&eQSL_User="+Login.Text+"&eQSL_Pswd="+Pas sword.Text;

UR4MJK
11.06.2018, 17:44
Получилось? Если нет, посмотрите заголовок запроса, тот который относится к протоколу (http), у меня пару раз встречалось, что сервер был настроен таким образом, что если в запросе не указывается имя клиента (user-agent) - возвращал ошибку. А по умолчанию там кажется ничего и не указывается, при формировании запроса. Хотя если авторизация проходит такое маловероятно, но все же возможно (например, если выполняется проверка на стороне сервера для обработки с разных браузеров.

UZ5DM
11.06.2018, 20:42
Да все получилось ! Спасибо всем большое. И огромная благодарность US-E-12 ! :drinks:
Буду продолжать дальше. Нужно научиться принимать данные с eqsl.cc - подтвержденные связи