Запись файла на сервер с помощью Internetwritefile

15.07.2010
2
0
#1
Код:
' Пытаюсь писать файл на сервер (пишу через HTTP-прокси)
Public Declare Function HttpSendRequestEx Lib "wininet.dll" Alias "HttpSendRequestExA" ( _
ByVal hRequest As Long, ByRef lpBuffersIn As INTERNET_BUFFERS, _
ByRef lpBuffersOut As INTERNET_BUFFERS, _
ByVal dwFlags As Long, ByVal dwContext As Long) As Long
... 'Открываю запрос
hReq = HttpOpenRequest(hConnection, "POST", strURL, vbNullString, vbNullString, _
0&, INTERNET_FLAG_NO_CACHE_WRITE, 0)
'	Отправляю запрос
iReq = HttpSendRequest(hReq, vbNullString, 0, vbNullString, 0)
'	Читаю файл в текстовую переменную
Open "c:\text.ext" For Binary Access Read As #71: fLen = LOF(71): sFile = InputB(fLen, #71)
Close #71
'	Заполняю структуру (изъято из примера на С++)
BufferIn.dwStructSize = Len(BufferIn)  '; // Must be set or error will occur
BufferIn.Next = 0& 'Null ';
BufferIn.lpcszHeader = 0& 'Null ';
BufferIn.dwHeadersLength = 0 ';
BufferIn.dwHeadersTotal = 0 ';
BufferIn.lpvBuffer = 0& 'Null ';
BufferIn.dwBufferLength = 0 ';
BufferIn.dwBufferTotal = fLen '; // This is the only member used other than dwStructSize
BufferIn.dwOffsetLow = 0 ';
BufferIn.dwOffsetHigh = 0 ';
'  Отправляю расширение запроса
LRet = HttpSendRequestEx(hReq, BufferIn, 0&, 0, 0) 
' Пишу файл пакетами по 2К 
Dim dBuffer As Long, pBuffer() As Byte
dBuffer = 2048: ReDim pBuffer(1 To dBuffer)
i = 0
Do
i = i + 1:  pos = 2048 * (i - 1) + 1
If fLen - pos < 2048 Then dBuffer = fLen - pos: ReDim pBuffer(1 To dBuffer + 1)
Get #71, , pBuffer
iRet = InternetWriteFile(hReq, pBuffer(1), dBuffer, dwBytesWritten)
If iRet = 0 Then
ErrorOut Err.LastDllError, "InternetWriteFile"
GoTo 89
End If
If Not fLen - pos > 2048 Then Exit Do
Loop
... если файл меньше 2К, то все проходит без ошибок и ошибку 87 выдает только после этого
Код:
iRet = HttpEndRequest(hReq, 0&, 0, 0)
... если же файл более 2К, то на второй записи происходит ошибка -
12030 - Тhe conntction with the server was tarmenated abnormally
Подскажите пожалуйста хотя бы где искать?