以下代碼會將我的應用程序登錄到服務器。如果登錄成功,該服務器將返回認證令牌。我需要使用該標記來查詢服務器的信息。在HttpSendRequest之後獲取身份驗證令牌
egressMsg := pchar('email='+LabeledEdit1.text+'&&password='+MaskEdit1.Text+#0);
egressMsg64 := pchar(Encode64(egressMsg));
Reserved := 0;
// open connection
hInternetConn := InternetOpen('MyApp', INTERNET_OPEN_TYPE_PRECONFIG, NIL, NIL, 0);
if hInternetConn = NIL then
begin
ShowMessage('Error opening internet connection');
exit;
end;
// connect
hHttpSession := InternetConnect(hInternetConn, 'myserver.com',
INTERNET_DEFAULT_HTTP_PORT, '', '', INTERNET_SERVICE_HTTP, 0, 0);
if hHttpSession = NIL then
begin
ShowMessage('Error connecting');
exit;
end;
// send request
hHttpRequest := HttpOpenRequest(hHttpSession, 'POST',
'/myapp/login', NIL, NIL, NIL, 0, 0);
if hHttpRequest = NIL then
begin
ShowMessage('Error opening request');
exit;
end;
label2.caption := egressMsg64 + ' '+inttostr(length(egressMsg64));
res := HttpSendRequest(hHttpRequest, Nil,
DWORD(-1), egressMsg64, length(egressMsg64));
if not res then
begin
ShowMessage('Error sending request ' + inttostr(GetLastError));
exit;
end;
BufferSize := Length(infoBuffer);
res := HttpQueryInfo(hHttpRequest, HTTP_QUERY_STATUS_CODE, @infoBuffer, BufferSize, Reserved);
if not res then
begin
ShowMessage('Error querying request ' + inttostr(GetLastError));
exit;
end;
reply := infoBuffer;
Memo1.Lines.Add(reply);
if reply <> '200' then
begin
//error here
end;
// how to I get the token here!!!!
InternetCloseHandle(hHttpRequest);
InternetCloseHandle(hHttpSession);
InternetCloseHandle(hInternetConn);
如何獲得該令牌?我嘗試了查詢cookie,我嘗試了InternetGetCookie()以及更多。 代碼認識
感謝
傑斯
編輯
我發現,如果你使用的InternetReadFile你可以得到令牌。但是,該令牌以字節數組形式出現。以後很難將其發送到服務器......任何人都知道如何將字節數組轉換爲pchar或字符串?
從我發現的token2 [0]中有數組的大小,所以我打電話給i:= 1 to Reserved2做 – Jessica 2010-04-22 18:37:42
不夠公平。但我不禁感覺到有一個'錯誤1'的錯誤潛伏在那裏。如果您正在讀取Reserved2字節,則該數組只能保存從索引[0]到[Reserved2-1]的有效值。 token2 [Reserved2]不應該包含一個有用的值,除非token2的大小大於Reserved2,否則應該有一個範圍檢查錯誤。 – shunty 2010-04-23 12:13:25
我收到一個錯誤:「常量表達式違反子範圍邊界」,光標放在@ token2 [0] – Jessica 2010-04-23 13:42:28