안녕하세요 요즘 들어 대폭 질문을 많이 하네요 ~
제가 임프님께서 올린 WinInet으로 파일 다운 받기를 조금 고쳐서
Url이 제대로 된것인지 판단하는 Is_Accessble이라는 함수를 만들어서요
리턴값으로 StatusText를 받아 와서
이걸 _ttol()함수로 long으로 전환한후 HTTP_STATUS_OK 와 비교를 하는데요
이 부분에서 StatusText는 "OK"인데 _ttol() 함수의 결과값은 0가 되네요
원래 데로라면 200이 되어야 하는데
전체 소스하고 같이 올립니다.
좀 봐주세요
AnsiString __fastcall TForm1::Is_Accesble(AnsiString Url)
{
AnsiString Agent = "Mozilla/4.0+(compatible;+MSIE+5.01;Windows+NT+5.0)";
if ( Url.AnsiPos("
http://") <= 0 )
Url = "
http://" + Url;
HINTERNET ISession = InternetOpen(Agent.c_str(), INTERNET_OPEN_TYPE_PRECONFIG, NULL, NULL, 0);
HINTERNET HttpFile = InternetOpenUrl(ISession, Url.c_str(), NULL, 0, INTERNET_FLAG_DONT_CACHE, 0);
AnsiString UrlBuff;
UrlBuff.SetLength(32);
DWord BuffSize = 32;
if(HttpQueryInfo(HttpFile, HTTP_QUERY_STATUS_TEXT, UrlBuff.c_str(), &BuffSize, NULL)==false)
{
switch(GetLastError())
{
case ERROR_INSUFFICIENT_BUFFER:
UrlBuff.SetLength(BuffSize+1);
HttpQueryInfo(HttpFile, HTTP_QUERY_CONTENT_LOCATION, UrlBuff.c_str(), &BuffSize, 0);
break;
case ERROR_HTTP_HEADER_NOT_FOUND:
UrlBuff = Url;
break;
default:
InternetCloseHandle(HttpFile);
return 0;
}
}
return UrlBuff;
}
void __fastcall TForm1::Button1Click(TObject Sender)
{
AnsiString StatusCode;
HRESULT hr = NULL;
WideString wURL = Edit1->Text;
hr = IsValidURL(NULL,wURL,0);
if ( hr != S_OK )
return ;
StatusCode = Is_Accesble(wURL);
Edit2->Text = StatusCode;
long nStatusCode = _ttol(StatusCode.c_str()); // 여기서 nStatusCode가 StatusCode가 OK이면
if ( nStatusCode != HTTP_STATUS_OK ) // 200이 되야 하는데 0이 되네요 쩝~
{
Memo1->Text = "존재하지 않는 페이지 입니다";
return ;
}
}
고수님들의 조언 바랍니다.