Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Сети";
Текущий архив: 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
1-30814
gserg
2002-05-31 14:05
2002.06.10
События в D.


1-30866
dimich
2002-05-29 14:37
2002.06.10
Вопрос про иконки!!!!


8-30924
Nimda
2002-01-26 17:39
2002.06.10
---|Ветка была без названия|---


1-30757
chips
2002-05-30 16:28
2002.06.10
размеры файла


4-31048
DeMoN-777
2002-04-09 03:58
2002.06.10
Добавление mainmenu на чужую форму





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский