Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

wininet - не понятно

20K
30 августа 2006 года
ronwilson
1 / / 30.08.2006
Привет! Все выходные сидел так и не понял как с помощью wininet сделать Upload файла в директорию на сервере, если для заливки в директорию нужно авторизоваться (на ней стоит права определенного пользователя, которому можно писать туда)? Поля user и password в вызове InternetConnect() даже если и заполненные то эффекта не дают И еще — FreeBSD 5.3/Apache 1.3 этот код вызывает 405 — HTTP_STATUS_BAD_METHOD — почему? IIS же просто дает 401 — HTTP_STATUS_DENIED

#include "stdafx.h"
#define _AFXDLL
#include <afxinet.h>
#include <Wininet.h>

#define HTTP_UPLOAD_BUFFER_SIZE 1024 * 5
#define HTTP_STATUS_CODE_LENGTH 10000

int _tmain(int argc, _TCHAR* argv[])
{
bool bResult = false;
DWORD dwServerCode = 0;

HINTERNET hInternet = InternetOpen(
_T("Microsoft Internet Explorer"),
0,
0,
0,
0);
if(hInternet)
{ // internet session opened
HINTERNET m_hInternetConn = InternetConnect(hInternet,
_T("localhost"),
INTERNET_DEFAULT_HTTP_PORT,
NULL,
NULL,
INTERNET_SERVICE_HTTP,
INTERNET_FLAG_DONT_CACHE | INTERNET_FLAG_KEEP_CONNECTION ,
NULL);
if(m_hInternetConn)
{ // connection created
HINTERNET hInternetReq;
if ( (hInternetReq = HttpOpenRequest(m_hInternetConn,
TEXT("PUT"),
_T("/pool/pool/SMAILIK"),
HTTP_VERSION,
TEXT(""),
NULL,
INTERNET_FLAG_RELOAD | INTERNET_FLAG_NO_CACHE_WRITE |
INTERNET_FLAG_KEEP_CONNECTION,
0)) )
{ // request created
HANDLE hFile = CreateFile (_T("D:\\\\temp\\\\Glass.rar"), GENERIC_READ, FILE_SHARE_READ,
NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
if (hFile != INVALID_HANDLE_VALUE)
{ // file opened
INTERNET_BUFFERS BufferIn = {0};
BufferIn.dwStructSize = sizeof (INTERNET_BUFFERS);
BufferIn.dwBufferTotal = GetFileSize (hFile, NULL);

if (HttpSendRequestEx(hInternetReq, &BufferIn, NULL, HSR_INITIATE, 0) )
{ // initial succ.
DWORD dwFileSize = GetFileSize (hFile, NULL);
char *pBuffer = new char[HTTP_UPLOAD_BUFFER_SIZE];

while(dwFileSize > 0)
{ // upload
int size = HTTP_UPLOAD_BUFFER_SIZE;
if(dwFileSize < HTTP_UPLOAD_BUFFER_SIZE)
size = dwFileSize;
DWORD dwSize;
if((ReadFile (hFile, pBuffer, size, &dwSize, NULL)))
{ // succ. read
dwFileSize -= size;
DWORD dwSizeWritten = 0;
if(InternetWriteFile(hInternetReq, pBuffer, size, &dwSizeWritten))
{ // succ written to remote server
} // succ written to remote server
else
{
TRACE0("Failed to InternetWriteFile\\n");
}

} // succ. read
else
{
TRACE0("Failed to read from local file\\n");
}
} // upload
TRACE0("File sent!\\n");
delete [] pBuffer;
HttpEndRequest(hInternetReq, NULL, 0, NULL);

DWORD dwCodeSize;
dwCodeSize = sizeof(DWORD);
BOOL bRet = HttpQueryInfo(hInternetReq, HTTP_QUERY_STATUS_CODE | HTTP_QUERY_FLAG_NUMBER, &dwServerCode, &dwCodeSize, NULL);
if(!bRet)
{
TRACE1( "Error on HttpQueryInfo %lu \\n", GetLastError());
}
TRACE1("Server code %ul\\n", dwServerCode);
if(dwServerCode < 400)
bResult = true;
} // initial succ.
else
{
TRACE1("Failed to initiate transfer %i\\n", GetLastError());
}
CloseHandle(hFile);
} // file opened
else
{
TRACE0("Failed to open local file\\n");
}
InternetCloseHandle(hInternetReq);
} // request created
else
{
TRACE1("Failed to HttpOpenRequest\\n", GetLastError());
}
InternetCloseHandle(m_hInternetConn);
} // connection created
else
{
TRACE1("Failed to InternetConnect\\n", GetLastError());
}
InternetCloseHandle(hInternet);
} // internet session opened
else
{
TRACE1("Failed to InternetOpen\\n", GetLastError());
}

return 0;
}
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог