Форум: "Сети";
Текущий архив: 2002.06.10;
Скачать: [xml.tar.bz2];
ВнизЗапись в филе на сервак Найти похожие ветки
← →
MMarat (2002-03-28 12:05) [0]Народ ! Трабл такой. Не помню где я взял эту процедуру, примерно так выглядела (до моего редактирования):
const BufferSize = 1024;
var
hSession, hURL: HInternet;
Buffer: array[1..BufferSize] of Byte;
BufferLen: DWORD;
sAppName: string;
i:integer;
s:string;
begin
memo1.Clear;
sAppName := ExtractFileName(Application.ExeName);
hSession := InternetOpen(PChar(sAppName), LOCAL_INTERNET_ACCESS, nil, nil, 0);
try
hURL := InternetOpenURL(hSession, PChar(" http://MyWeb/a.txt"), nil,0,0,0);
try
repeat
InternetReadFile(hURL, @Buffer, SizeOf(Buffer), BufferLen);
s:="";
for i:=1 to BufferLen do begin
s:=s+chr(Buffer[i]);
end;
memo1.Lines.Add(s);
until BufferLen = 0;
finally
InternetCloseHandle(hURL)
end
finally
InternetCloseHandle(hSession)
end
end;
Ну соответственно в мемо попадает содержимое файла a.txt лежащий на нашем местном серваке. Теперь мне нада записать туда че-нить. Наваял похожую процедурку:
const BufferSize = 1024;
var
hSession, hURL: HInternet;
Buffer: array[1..BufferSize] of Byte;
BufferLen: DWORD;
sAppName: string;
i:integer;
s:string;
begin
if trim(edit1.Text) <> "" then begin
sAppName := ExtractFileName(Application.ExeName);
hSession := InternetOpen(PChar(sAppName), LOCAL_INTERNET_ACCESS, nil, nil, 0);
try
hURL := InternetOpenURL(hSession, PChar(" http://MyWeb/a.txt"), nil,0,0,0);
try
s:=edit1.Text;
fillchar(Buffer, SizeOf(Buffer), 0);
for i:=1 to Length(s) do begin
Buffer[i]:=ord(s[i]);
end;
InternetWriteFile(hURL, @Buffer, SizeOf(Buffer), BufferLen);
finally
InternetCloseHandle(hURL)
end
finally
InternetCloseHandle(hSession)
end
end;
end;
Но InternetWriteFile дает ложь.
Кто знает, где грабли ? У филе a.txt - полный доступ для всех...
Есть подозрение, что во втором параметре InternetOpen нужно ставить другое значение, а какое - не знаю...
Спасиба.
← →
Wonder (2002-03-28 12:12) [1]А ты хоть понимаешь, что ты пытаешься сделать?
Расскажи поподробнее.
← →
MMarat (2002-03-28 12:18) [2]Ну как ? Считывание инфы из файла, который лежит на серваке. Соответственно, попытка записи тунды...
← →
Kornet (2002-03-28 12:26) [3]Обычно на http серверах стоят права только на чтения, со всеми вытекающими отсюда последствиями...
← →
MMarat (2002-03-28 12:28) [4]Дык я сам собственноручно в свойствах-безопасности файла дал всем полный доступ...
← →
Wonder (2002-03-28 12:30) [5]>Kornet
Покажи мне хоть один "необычный" http-сервер, на который ты хоть что-нибудь сможешь таким макаром записать? Не используя протокол http и html (формы и т.п.).
← →
Wonder (2002-03-28 12:35) [6]>MMarat
Ты не совсем ясно себе представляешь, как это работает.
Ф-цией InternetOpenURL ты открываешь URL, а не файл.
← →
MMarat (2002-03-28 12:38) [7]Значит, не получится, да ?
А для чего тогда в дельфях функция InternetWriteFile ?
← →
Wonder (2002-03-28 12:43) [8]Во-первых, не в делфях, а в WinInet API
Во-вторых, а посмотреть хелп нельзя?
В-третьих,
This function writes data to an open Internet file
hFile
[in] Valid HINTERNET handle returned from a previous call to FtpOpenFile or an HINTERNET handle sent by HttpSendRequestEx.
Где здесь хоть слово об URL?
← →
Kornet (2002-03-28 13:04) [9]2Wonder:
>Покажи мне хоть один "необычный" http-сервер, на который ты
>хоть что-нибудь сможешь таким макаром записать? Не используя
>протокол http и html (формы и т.п.).
А причём тут сервер? В HTTP протоколе есть метод PUT, он позволяет загружать на веб.сервер документ, но повторю, что традиционно эта функция не реализована или отключена, реализация этого к примеру на апаче делается подключением модуля mod_put...
P.S.: Что бы не быть голословным: http://www.citforum.ru/internet/cgi_tut/rqst.shtml#PUT
← →
Wonder (2002-03-28 13:20) [10]>Kornet
Ты внимательно читаешь или просто ищешь знакомые слова?
Что я написал раньше?
"...Не используя протокол http..."
← →
Kornet (2002-03-28 14:08) [11]Вопрос звучал так: почему не сохраняется документ по URI http://MyWeb/a.txt. Не важно на чём ты программируешь, на Дельфи, Си, или с помощью левых компонент или вызова функций API, в любом случае при работе с веб. сервером используется сеансовый протокол HTTP. Отсюда вывод, ты сам то понял, что спросил?
← →
Wonder (2002-03-28 14:48) [12]>Kornet
Началось :) Ладно-ть, раз так.
1. Не надо перевирать под себя вопросы.
2. Чтобы спорить, надо бы знать предмет спора, а именно ф-ции WinInet API. Что, зачем и как.
3. Как ты себе представляешь, что делает ф-ция InternetWriteFile?
Ты полагаешь, что она создает HTTP PUT-запрос?
4. И последнее. Если я простым сокетом прилеплюсь к порту 80 веб-сервера, по-твоему, я автоматически использую HTTP?
← →
Digitman (2002-03-28 15:18) [13]>Kornet
Прежде чем упорно нести чушь и спорить с <Wonder>, абстрагируйся на минуту от своих "филе" да "серваков", да задумайся над различем hFile и прочих хэндлов, используемых в различных API-вызовах !
← →
Kornet (2002-03-28 15:18) [14]Ну как говаривал один классик, в споре рождается истина. :)
1. Вопрос как был, так и остался вверху ветки.
2. А разве мы спорили о функциях WinInet API?
>Покажи мне хоть один "необычный" http-сервер, на который ты
>хоть что-нибудь сможешь таким макаром записать? Не используя
>протокол http и html (формы и т.п.).
3. Я этого не утверждал, ты сам ответил что делает эта функция: Wonder © (28.03.02 12:43)
4. Подключаясь к порту 80 веб. сервера ты используешь транспортный протокол TCP/IP, а вот что бы хоть что то получить от сервера, тебе, как бы ни хотелось, придётся использовать HTTP...
На вопрос автора я дал ответ, что не все сервера могут это делать, да и не таким способом как он... Но это, как ни парадоксально это звучит, сделать можно. Хотя другими методами, не зацикливаясь на функциях API ака WinInet API.
Мир? :-)
← →
Digitman (2002-03-28 15:18) [15]>Kornet
Прежде чем упорно нести чушь и спорить с <Wonder>, абстрагируйся на минуту от своих "филе" да "серваков", да задумайся над различем hFile и прочих хэндлов, используемых в различных API-вызовах !
← →
Digitman (2002-03-28 15:22) [16]>Kornet
Приношу извинение. Это адресовано автору, <MMarat>
← →
MMarat (2002-03-29 09:05) [17]Звыняйте шо вмешиваюсь в ваш спор :) , но может кто знает как осуществить запись в файл, хотя бы примерно... Хелп у меня почему-то не вызывается по этим апишным функциям, а сидеть и разглядывать исходник wininet - все равно непонятно... Прошу простить, но в этой области я галимый ламер. :)
← →
Wonder (2002-03-29 10:53) [18]>MMarat
Поставь задачу: в какой файл, где он находится, какими средствами записывать и т.п.
Страницы: 1 вся ветка
Форум: "Сети";
Текущий архив: 2002.06.10;
Скачать: [xml.tar.bz2];
Память: 0.49 MB
Время: 0.006 c