만해 님이 쓰신 글 :
: 안녕하세요 요즘 들어 대폭 질문을 많이 하네요 ~
:
: 제가 임프님께서 올린 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 ;
: }
: }
:
: 고수님들의 조언 바랍니다.
헐~
제가 요즘 왜 이런지~
if(HttpQueryInfo(HttpFile, HTTP_QUERY_STATUS_TEXT, UrlBuff.c_str(), &BuffSize, NULL)==false)
위의 쿼리문(HTTP_QUERY_STATUS_TEXT)을 HTTP_QUERY_STATUS_CODE로 바꿔줘야 하는걸 깜빡했네요
요즘 왜이러나 한해 더 늙어 그런감 쩝~