|
ayh 님이 쓰신 글 :
: put 방식을 사용하신 코드 같습니다.
: IIS냐 unix상의 apache냐가 문제가 아니라, put 방식을 지원하도록 설정했느냐 아니냐의 문제입니다.
:
: put 방식은 말그대로 웹서버 상의 특정 디렉토리에 원하는 파일을 임의로 가져다 놓을 수가 있기 때문에 보안 상의 문제 등 여러가지 이유로 보통 설정상에서 꺼놓는 경우가 많습니다. apache 서버의 put 방식을 지원하도록 설정을 변경하신 후 테스트 해보시면 잘 될겁니다.
:
: 그러나, 일반적이 경우 put 방식은 대부분의 관리자들이 지원하지 않도록 설정하니 이 점도 유의하시는게 좋을 듯 합니다.
:
: leo21c 님이 쓰신 글 :
: : 아래와 같은 방법으로 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와 동일한 결과값을 리턴
|