информационная безопасность
без паники и всерьез
 подробно о проектеRambler's Top100
Сетевые кракеры и правда о деле ЛевинаСтрашный баг в Windows
BugTraq.Ru
Русский BugTraq
 Анализ криптографических сетевых... 
 Модель надежности двухузлового... 
 Специальные марковские модели надежности... 
 Линуксовый ботнет, распространяющийся... 
 Конец поддержки Internet Explorer 
 Рекордное число уязвимостей в 2021 
главная обзор RSN блог библиотека закон бред форум dnet о проекте
bugtraq.ru / форум / programming
Имя Пароль
ФОРУМ
все доски
FAQ
IRC
новые сообщения
site updates
guestbook
beginners
sysadmin
programming
operating systems
theory
web building
software
hardware
networking
law
hacking
gadgets
job
dnet
humor
miscellaneous
scrap
регистрация





Легенда:
  новое сообщение
  закрытая нитка
  новое сообщение
  в закрытой нитке
  старое сообщение
  • Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
  • Новичкам также крайне полезно ознакомиться с данным документом.
Ты чего такой несамостоятельный? -)) 23.09.09 08:49  Число просмотров: 2869
Автор: HandleX <Александр М.> Статус: The Elderman
Отредактировано 23.09.09 09:01  Количество правок: 1
<"чистая" ссылка>
Залазь на MSDN и не вылазь оттуда, пока всё не заработает! -))
Вот тебе рабочий пример работы с вининетом.
Правда, метод используется PUT, и прокси не юзает. Но так всё похоже.
Извини за языг программирования, но разобраться можно, я надеюсь -))
AnyStoredFiles>>copyFile: filePath to: serverName url: anUrlString
	| inetLib hInternet |
	
	inetLib := WinInetLibrary default.

	"Получаем хендл для тырнета"
	hInternet :=inetLib 
				internetOpen: SessionManager current applicationShortName
				accessType: INTERNET_OPEN_TYPE_PRECONFIG
				proxyName: nil
				proxyByPass: nil
				flags: 0.
	hInternet isNull ifTrue: [^Win32Error signal].

[hConnect |
	"Подключаемся к серверу"
	hConnect := inetLib 
				internetConnect: hInternet 
				serverName: serverName
				serverPort: INTERNET_INVALID_PORT_NUMBER "Это порт по умолчанию"
				userName: 'HandleX' "Это я для потомков ;-)"
				password: 'none'
				service: INTERNET_SERVICE_HTTP
				flags: 0 context: 0.
	hConnect isNull ifTrue: [Win32Error signal].

	[hRequest |
		"Подготавливаем к использованию метод HTTP->PUT"
		hRequest := inetLib 
				httpOpenRequest: hConnect
				verb: 'PUT'
				"Наименование объекта — серверная папка + имя файла"
				objectName: (
					anUrlString last == $/ 
						ifTrue:[anUrlString, (File splitFilenameFrom: filePath)] 
						ifFalse: [anUrlString, '/', (File splitFilenameFrom: filePath)]
				)
				version: nil
				"Указываем реферрера — какой класс объекта вызвал этот метод, может пригодится когда-нибудь"
				referrer: self name
				acceptTypes: nil
				flags: 0 context: nil.
		hRequest isNull ifTrue: [Win32Error signal].

		[buff buffSize hFile fSize bytesWritten inetBuff |
			"Открываем файл, создаём все нужные буферы"
			buff := ByteArray newFixed: (buffSize := 2048).
			hFile := FileStream read: filePath text: false.
			fSize := hFile size.
			bytesWritten := DWORD new.

			"Отправляем запрос с указанием размера файла"
			inetBuff := INTERNET_BUFFERS new.
			inetBuff dwBufferTotal: fSize.
			(inetLib 
				httpSendRequestEx: hRequest
				buffersIn: inetBuff
				buffersOut: nil
				flags: HSR_INITIATE context: nil) ifFalse: [Win32Error signal].

			[hFile atEnd] whileFalse: 
			[bytesRead |
				"Отправляем файл блоками, равными размеру буфера или меньше, если остаток меньше буфера"
				bytesRead := (hFile position + buffSize > fSize) ifFalse: [buffSize] ifTrue: [fSize - hFile position].
				hFile next: bytesRead into: buff startingAt: 1.
				(inetLib 
					internetWriteFile: hRequest
					buffer: buff yourAddress
					numberOfBytesToWrite: bytesRead
					numberOfBytesWritten: bytesWritten) ifFalse: [Win32Error signal]].
			hFile close.

			(inetLib httpEndRequest: hRequest buffersOut: nil flags: 0 context: nil) ifFalse: [Win32Error signal]
	"Закрываем все используемые хендлы"
			] ensure: [inetLib internetCloseHandle: hRequest]
		] ensure: [inetLib internetCloseHandle: hConnect]
	] ensure: [inetLib internetCloseHandle: hInternet]

---
<programming> Поиск 






Rambler's Top100
Рейтинг@Mail.ru


  Copyright © 2001-2022 Dmitry Leonov   Page build time: 0 s   Design: Vadim Derkach