Отправляются данные в 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>
Вид для печати
Это точно - Вложение 212711
То есть вот эти строки
<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>
Я правильно понимаю ?
Через программу не передавал, загружаю данные на сайты adif файлом в таком виде:
<QSO_DATE:8>20180610<TIME_ON:4>0540<CALL:6>WB4WXX<BAND:3>20M<MODE:3>SS B<RST_SENT:2>57<RST_RCVD:2>59<FREQ:9>14.000000<EOR>
Без заголовка и каждая связь в одной строке. Данные записаны без пробелов. Для eQSL teg FREQ не нужен - точную частоту они не указывают, но нужен для других сайтов.
Также и RST_RCVD - не отображается, но если присутствует в данных, то не мешает, просто игнорируется сайтом.
Я хочу в своей программе по окончанию qso передавать данные на eqsl.cc
А то как залить на eqsl.cc adif file - это без проблем. Я формирую и читаю adif (на c#) без проблем
Меня интересует только как передать данные текущего qso
Метод POST
Отправка данных
Url взял в комы, чтобы отобразился адрес. При отправке их ставить не надо.Цитата:
'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
В ответ получите сколько добавлено QSO или как у меня дубликат
Цитата:
Warning: Y=2018 M=06 D=10 UV5EUE 10M FT8 Bad record: Duplicate
Result: 0 out of 1 records added
Делаю так :
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) Недопустимый запрос.
Что я не правильно делаю ?
Я исправил
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) Недопустимый запрос.
Поставте какой-нибудь web debugging, к примеру Fiddler Free и посмотрите, что Вы отправляете по сети сервису, похоже это на запрос.
Можно попробывать отправить массив
Цитата:
// переводим данные в массив байтов
byte[] d = Encoding.UTF8.GetBytes(postData);
// устанавливаем длинну данных для запроса
request.ContentLength = d.Length;
stream = request.GetRequestStream();
// собственно отправляем запрос
stream.Write(d, 0, d.Length);
Content-Type: multipart/form-data;
по этому и не верный.
Вы используете сторонний компонет - а он шлет непонятно что...
Лично моя рекомендация: если действительно хотите написать что-то стоящее, то работу с Интернетом нужно писать самому на WinAPI - благо по этому вопросу в инете информации много и не сложно.
Плюс потом ведь захотите на LoTW отправлять?))) А там свои нюансы.
Это существенно проще, чем в сторонних компонентах разбираться.
... Да и еще - шлете по 1 QSO в режиме реального времени? Если да, то не multipart/form-data;
а в Адиф добавляете
&eQSL_User=<USER>&eQSL_Pswd=<PASS>& ?
Нет параметра
Цитата:
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;