|
아래와 같은 방법으로 MSDN에 있는 내용을 이용해서 WinInet의 함수들을 가지고 만들었습니다.
UNIX 파일 서버에서 파일 다운로드는 문제없이 되는데 파일 업로드는 405에러가 발생하네요.
WinInet함수들을 가지고 Unix로 파일 업로드는 불가능 한 건가요?
405에러라는 것이 Method Not Allowed라는 뜻인데....사용할 수 없다는 거 아닌가요?
제 컴퓨터는 WinXP로 IIS서버를 만들어서 테스트 할 경우에는 문제없이 작동하는 것을 확인했습니다.
그런데 Unix서버에 올릴때만 에러가 발생하네요.
HTTP프로토콜을 이용해서 파일 업로드를 할 경우에 WinSock같은 것을 이용하는 것이 더 좋을까요?
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//인터넷 연결
hInternet=InternetOpen("HTTPClient", INTERNET_OPEN_TYPE_PRECONFIG, NULL, NULL, 0);
if (hInternet==NULL) return false;
//URL을 연다.
hURL = InternetConnect(hInternet, serverAddress/*Host 헤더값, 서버 주소*/, ServerURL.ID/*strID*/, URL.PW/*strPassword*/,
INTERNET_SERVICE_HTTP, 0, 0);
//인터넷 파일의 핸들을 얻는다.
hRequest = HttpOpenRequest(hURL, "PUT", strRemoteFile, NULL, NULL,
0, INTERNET_FLAG_KEEP_CONNECTION | INTERNET_FLAG_RELOAD | INTERNET_FLAG_NO_CACHE_WRITE, 0);
if (!hRequest) goto exit;
//로컬 파일의 핸들을 얻고, 사이즈를 저장한다.
hLocalFile=CreateFile(strLocalFile, GENERIC_READ, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
if(!hLocalFile) goto exit;
nFilesize = GetFileSize(hLocalFile, NULL);
cBuffer = (char *)malloc(nFilesize); //메모리 할당 사용.
if(!ReadFile(hLocalFile, cBuffer, nFilesize, &dwRead, NULL)) goto exit;
//리퀘스트를 보낸다.
bHttpSendRequest = HttpSendRequest(hRequest, NULL, NULL, cBuffer, dwRead);
//http header로 전송 결과 확인
if (!CheckSrvData(hRequest, Header, myParsedServerURL) || !(Header=="200" || Header=="201"))
goto exit;
//로컬파일 핸들을 마무리한다.
if (hLocalFile)
CloseHandle(hLocalFile);
//인터넷파일 핸들을 마무리한다.
if (hRequest)
InternetCloseHandle(hRequest);
return bHttpSendRequest; //bHttpSendRequest와 동일한 결과값을 리턴
exit:
//로컬파일 핸들을 마무리한다.
if (hLocalFile)
CloseHandle(hLocalFile);
//인터넷파일 핸들을 마무리한다.
if (hRequest)
InternetCloseHandle(hRequest);
return false; //bHttpSendRequest와 동일한 결과값을 리턴
|