Deutsch
Germany.ruФорумы → Архив Досок→ Программирование

Как правильно записать uri с пользователем

787  1 2 все
AlexNek патриот18.11.22 18:20
AlexNek
18.11.22 18:20 

вроде как бы так - ftp://usertest:password@192.168.2.105:2222/

но энта фигня отчего-то не распознает UserInfo

Uri uri = new Uri(uriStr);

#1 
Murr патриот18.11.22 18:49
Murr
18.11.22 18:49 
в ответ AlexNek 18.11.22 18:20

RFC 959.

У тебя вроде правильно.


энта фигня

-----

А что это за фигня?

Если мелкомягкая - смотри как определил строку - там с собакой нужно.

#2 
AlexNek патриот18.11.22 20:15
AlexNek
NEW 18.11.22 20:15 
в ответ Murr 18.11.22 18:49

Написал отдельный тест - работает. смущ Надо еще в исходники глянуть внимательней.


смотри как определил строку

Там нет определения строки, из кода поступает. А на входе в текстовом файле. По дороге видимо, что то потерялось

#3 
AlexNek патриот18.11.22 20:29
AlexNek
NEW 18.11.22 20:29 
в ответ Murr 18.11.22 18:49

Нашёл блин смущ

там поступает немного другая строка, которая показывается как:sftp:\\user..., хотя на самом деле "sftp:\user..."

Тогда другой вопрос - как сделать чтобы в пароле можно было использовать любые символы (типа - фыв:@12/) и для ввода пароля в текст не требовалось проги кодировщика

#4 
alex445 коренной житель18.11.22 21:21
AlexNek патриот18.11.22 22:07
AlexNek
NEW 18.11.22 22:07 
в ответ alex445 18.11.22 21:21

Файл "управления" с паролями и прочей ерундой будет вводит совершенно другой человек. Любое "сложное" кодирование потребует дополнительной проги.

Нужно "простое" кодирование, типа вместо @ записать @@ или \@, хотя с этим работы много. Проще, видимо, пароль записать в другом месте, а на месте пароля давать только ссылку на него, типа "password35"

#6 
alex445 коренной житель18.11.22 23:10
NEW 18.11.22 23:10 
в ответ AlexNek 18.11.22 22:07, Последний раз изменено 18.11.22 23:13 (alex445)

Не понял, какая дополнительная прога? А ваш собственный метод кодирования - не такая же дополнительная прога?


Если что, этих HTML-кодирующих классов в дотнете минимум 3 штуки (МС развёл бардак):


.NET 4.8 - System.Web.dll - https://learn.microsoft.com/en-us/dotnet/api/system.web.ht...

.NET 7 - System.Runtime.dll - https://learn.microsoft.com/en-us/dotnet/api/system.net.we...

.NET 7 - System.Web.HttpUtility.dll - https://learn.microsoft.com/en-us/dotnet/api/system.web.ht...


Ну или вот ещё

https://learn.microsoft.com/en-us/dotnet/api/system.uri.es...

#7 
uscheswoi_82 коренной житель19.11.22 00:25
NEW 19.11.22 00:25 
в ответ AlexNek 18.11.22 18:20
вроде как бы так - ftp://usertest:password@192.168.2.105:2222/
но энта фигня отчего-то не распознает
UserInfoUri uri = new Uri(uriStr);

Имхо всегда было через NetworkCredintal - см. https://learn.microsoft.com/ru-ru/dotnet/api/system.net.ne.... Пример тут https://codingvision.net/c-connecting-to-ftp-server:

FtpWebRequest ftpRequest = (FtpWebRequest)WebRequest.Create("ftp://myFtpAddress.tld/myFile.txt");
ftpRequest.Credentials = new NetworkCredential("username", "password");


Если я кому-то отвечаю, это не значит что я ему симпатизирую, каждый остаётся при своём мнение Моя ФЛ Он и Она
#8 
AlexNek патриот19.11.22 11:05
AlexNek
NEW 19.11.22 11:05 
в ответ alex445 18.11.22 23:10
Не понял, какая дополнительная прога?

ну вот пароль

Q1":@/<\
дайте ка мне его допустимое представление без использования "компа" и пр.
#9 
AlexNek патриот19.11.22 11:19
AlexNek
NEW 19.11.22 11:19 
в ответ uscheswoi_82 19.11.22 00:25
Имхо всегда было через NetworkCredintal

А причем здесь NetworkCredintal и доступ к ФТП?

Нужно правильно разобрать входные данные. Вопрос с доступом решен. Не решен вопрос как узнать, что файл полностью закачан на сервер? Office тоже выдает "интересный " сценарий записи файла.


Вообще-то в итоге должно получиться следующее: Есть текстовый сценарий наблюдения за фтп и другими хранилищами, как только туда загружается определенный файл, с ним делаются какие то операции, например записывается в какую-то базу, в зависимости от различных критериев.


Кстати, интересен также вопрос Юнит тестирования подобных штук с различными файловыми системами. На любой пук делать интерфейс не хочется.


#10 
alex445 коренной житель19.11.22 12:15
NEW 19.11.22 12:15 
в ответ AlexNek 19.11.22 11:05, Последний раз изменено 19.11.22 12:16 (alex445)
Q1":@/<\
дайте ка мне его допустимое представление без использования "компа" и пр.

Не понял. Как ввести пароль в комп без компа, или что?


Ну на листочке запишите ему удобный для вас пароль. Или на листочке же напишите ему, какие символы нельзя использовать (или какие можно - там буквы, цифры, и пару знаков).


Вообще, по жизни многие программистские проблемы решаются разговором по душам или волшебным пенделем - абстракции всякие и алгоритмы зачастую не нужны.

#11 
AlexNek патриот19.11.22 13:30
AlexNek
NEW 19.11.22 13:30 
в ответ alex445 19.11.22 12:15
Как ввести пароль в комп без компа

Нет конечно. Как преобразовать без компа. Ссылки то кто написал?

#12 
Murr патриот19.11.22 18:25
Murr
19.11.22 18:25 
в ответ AlexNek 18.11.22 20:29, Последний раз изменено 19.11.22 18:32 (Murr)

sftp:\\user.

-----

sftp://user:pass@host:port/path

см. forward-slash.

#13 
AlexNek патриот19.11.22 18:33
AlexNek
NEW 19.11.22 18:33 
в ответ Murr 19.11.22 18:25

записано в исходном файле было правильно, но это я уже нашел. Вот как найти что файл уже полностью записан на фтп сервер?

#14 
Murr патриот19.11.22 18:37
Murr
NEW 19.11.22 18:37 
в ответ uscheswoi_82 19.11.22 00:25
Имхо всегда было через NetworkCredintal

-----

FTP несколько более старый протокол, чем первый из .Net.

#15 
uscheswoi_82 коренной житель19.11.22 20:07
NEW 19.11.22 20:07 
в ответ AlexNek 19.11.22 11:19
А причем здесь NetworkCredintal и доступ к ФТП?

Чтобы залогиниться как надо, и чтобы хакеры не увидели ту строчку, даже у PHP через ftp_login делается см. https://www.php.net/manual/ru/function.ftp-login.php. Во многих примерах именно через NetworkCredintal логинятся к FTP, например https://www.c-sharpcorner.com/article/working-with-ftp-usi....


Не решен вопрос как узнать, что файл полностью закачан на сервер?

Вот пример:https://web.archive.org/web/20150207155137/http://codular....

Если я кому-то отвечаю, это не значит что я ему симпатизирую, каждый остаётся при своём мнение Моя ФЛ Он и Она
#16 
AlexNek патриот19.11.22 21:06
AlexNek
NEW 19.11.22 21:06 
в ответ uscheswoi_82 19.11.22 20:07
Чтобы залогиниться как надо

Типа, как бонус к вопросу, понятно...


Во многих примерах именно через NetworkCredintal логинятся к FTP

А никто не говорил как именно логинятся к ФТП. Скажу по секрету - без мелкософта.


Вот пример

Это пример загрузки файла на сервер. Задача же совсем другая - есть ФТП сервер и нужно узнать со стороны сервера, когда файл полностью загрузится.

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

#17 
Murr патриот20.11.22 00:25
Murr
NEW 20.11.22 00:25 
в ответ AlexNek 19.11.22 18:33

Вот как найти что файл уже полностью записан на фтп сервер?

-------

Никак.

Я решал загрузкой в отдельную область и мовом по окончанию. Но там можно было - хорошая сеть без обрывов соединения.

#18 
vlasow коренной житель20.11.22 00:34
NEW 20.11.22 00:34 
в ответ AlexNek 19.11.22 21:06

Наверняка ftpd держит файл залоченным пока не закончит. Можно периодически проверять на предмет залоченности.

#19 
AlexNek патриот20.11.22 13:17
AlexNek
NEW 20.11.22 13:17 
в ответ Murr 20.11.22 00:25
Никак.

тута аж 5 вариантов, хотя большинстов на клиенте

https://stackoverflow.com/questions/29238153/how-to-detect...


Как раз один совпадает с тем что делается смущ

#20 
AlexNek патриот20.11.22 13:19
AlexNek
NEW 20.11.22 13:19 
в ответ vlasow 20.11.22 00:34
Наверняка ftpd держит файл залоченным

Не всегда и не везде, но один фиг - это периодический опрос сервера. Но похоже без этого никак

#21 
MrSanders коренной житель20.11.22 21:20
NEW 20.11.22 21:20 
в ответ AlexNek 19.11.22 21:06
Задача же совсем другая - есть ФТП сервер и нужно узнать со стороны сервера, когда файл полностью загрузится.

Что значит "со стороны сервера"? Я - фтп сервер, клиент открыл со мной соединение и передаёт файл, а мне надо понять передали мне уже все данные?

Или я - клиент фтп сервера, и хочу узнать передал ли другой клиент какой-то файл до конца?

#22 
AlexNek патриот20.11.22 21:49
AlexNek
NEW 20.11.22 21:49 
в ответ MrSanders 20.11.22 21:20
я - клиент фтп сервера, и хочу узнать передал ли другой клиент какой-то файл до конца

Ну вроде не планировалось запускать прогу прямо на сервере. Хотя да, неизвестно.


Что вот еще, не получается попробовать. Народ как то замапил фтп соединение на диск винды, как, вроде понятно, но повторить не получается. хммм

Будет ли SystemFileWatcher работать в данном случае, подозреваю что нет. Но как отличить, такое соединение от обычного сетевого диска, там он работает. Пока еще не искал

#23 
MrSanders коренной житель21.11.22 09:11
NEW 21.11.22 09:11 
в ответ AlexNek 20.11.22 21:49
Ну вроде не планировалось запускать прогу прямо на сервере. Хотя да, неизвестно.

А что самое смешное? То что не важно - сервер ты или другой клиент. Если ты по FTP работаешь, то правильный ответ: никак.

Емнип STOR означает "слушай соединенине с data и пиши всё, что получишь в файл". Как соединение закрылось - всё, значит закончили. А почему оно закрылось знает только клиент, который его открыл. И обычно он и проверяет всё ли закачалось. Закачал файлик - запросил какой размер у закачанного. Совпадает с исходным? Ну значит всё отлично, закончили.

Если ты сервер ftp, ты можешь пытаться "угадать", не было ли проблем. Вроде "если 60 секунд не приходило данных а потом закрылось соединение - наверное у клиента таймаут по сокету".

#24 
AlexNek патриот21.11.22 17:55
AlexNek
NEW 21.11.22 17:55 
в ответ MrSanders 21.11.22 09:11
по FTP работаешь, то правильный ответ: никак

В теории да, но на практике, в данном случае, можно ошибками передачи пренебречь.

Данные передаются устройствами, данных мало. Пусть даже какой то процент файлов будет бракованный - это всё равно лучше чем ничего.


Хотя, видимо, правильнее будет соединить устройства со спец. фтп, который сразу будет данные в базу записывать (кроме фтп у устройств больше ничего нет)

#25 
1 2 все