BeforeNavigate2 이벤트에서 PostData 읽어오기 (GET 방식과 POST 방식의 구분)
STDMETHODIMP CWebOCWindow::BeforeNavigate2(IDispatch *pDisp, VARIANT *URL,
VARIANT *Flags, VARIANT *TargetFrameName,
VARIANT *PostData, VARIANT *Headers,
VARIANT_BOOL *Cancel)
{
if (PostData != NULL && PostData->vt == (VT_VARIANT|VT_BYREF) && PostData->pvarVal->vt != VT_EMPTY )
{
char *szTemp = NULL, *szPostData = NULL;
long plLbound, plUbound;
SAFEARRAY *parrTemp = PostData -> pvarVal->parray;
SafeArrayAccessData(parrTemp , (void HUGEP **) &szTemp);
SafeArrayGetLBound(parrTemp , 1, &plLbound);
SafeArrayGetUBound(parrTemp , 1, &plUbound);
szPostData = new char[plUbound - plLbound + 2];
StrCpyN(szPostData, szTemp, plUbound - plLbound + 1);
szPostData[plUbound-plLbound] = '\0';
SafeArrayUnaccessData(parrTemp);
MessageBox(szPostData);
delete[] szPostData;
}
return S_OK;
}
C++에서는 (PostData != NULL && PostData->vt == (VT_VARIANT|VT_BYREF) && PostData->pvarVal->vt != VT_EMPTY ) 이 조건이 참이면 POST이고 아니면 GET으로 구분할 수 있다.
델파이에서는 아래와 같다.
procedure TfrmMain.wbMainBeforeNavigate2(Sender: TObject;
const pDisp: IDispatch; var URL, Flags, TargetFrameName, PostData,
Headers: OleVariant; var Cancel: WordBool);
var
i:integer;
postStr:String;
postAry:array of byte;
begin
if Length(PostData) > 0 then
begin
postAry := PostData ;
for i:=0 To Length(postAry) do
postStr := postStr + chr(postAry[i]);
ShowMessage(postStr);
end;
Length(PostData) 길이가 0보다 크다면 데이타가 POST로 넘어왔다고 보면 된다. 이것으로 델파이에서는
POST와 GET방식을 구분할 수 있다.
아래는 기타 PostData를 읽는 방법이다.
function VariantToString(AVar: OleVariant): string;
var
i: integer;
V: olevariant;
begin
Result := '';
if VarType(AVar) = (varVariant or varByRef) then
V := Variant(TVarData(AVar).VPointer^)
else V := AVar;
if VarType(V) = (varByte or varArray) then
try
for i:=VarArrayLowBound(V,1) to VarArrayHighBound(V,1) do
Result := Result + Chr(Byte(V[i]));
except;
end
else Result := V;
end;
....
OnBeforeNavigate2
ShowMessage(VariantToString(PostData));
*참고
PostData 값을 넣는 방법
S:String
...
PostData := VarArrayCreate([1, Length(S) + 1], varByte);
System.Move(S[1], VarArrayLock(PostData)^, Length(S) + 1);
VarArrayUnlock(PostData);
'델파이' 카테고리의 다른 글
[델파이] 기본 함수 정리 (0) | 2009.06.15 |
---|---|
델파이에서 메모리 누수 확인 (0) | 2009.04.20 |
IE 기본 툴바에 버튼 생성하기 (0) | 2009.03.10 |
현재 페이지의 모든 쿠키 읽어 오기 (0) | 2009.01.29 |
서버 상태 확인 (0) | 2009.01.12 |
ActiveX의 ProgID 변경하기 (0) | 2008.11.26 |
생성자 오버로딩 하기 (0) | 2008.11.20 |
동적 IP, DNS 변경 함수 (0) | 2008.11.12 |
IE Band에서 탭키, 엔터키, 델리트키(VK_TAB, VK_RETURN, VK_DELETE) 입력가능하도록 하기 (0) | 2008.10.17 |
소수점 이하 제거하는 함수 (0) | 2008.10.06 |