|
16番会議室「玉石混淆みんなで作るSample蔵」に寄せられたサンプル
"[Wininet]POST及びStatusCodeの確認"
usesにWininetを加えてください。Wininet.dllはInternet Explorerで使われ
ているDLLです。
function GetFileFromInternet(AUrl, APostStr:string;
AStream:TMemoryStream): integer;
var
hSession, hConnect, hRequest: hInternet;
RequestMethod, Header: string;
Buf:array[0..1023] of Char;
ReadCount:Cardinal;
UrlInfo: TUrlInfo;
procedure SetTimeOut; //TimeOutの設定
var
TimeOut: integer;
begin
TimeOut := 60 * 1000; //単位はmsなんで秒に変換(60秒に設定)
InternetSetOption(hSession, INTERNET_OPTION_RECEIVE_TIMEOUT, @TimeOut,
SizeOf(TimeOut));
end;
procedure GetHttpStatus; //StatusCodeの取得
var
Len, Reserved: DWORD;
begin
Reserved := 0;
Len := SizeOf(Result);
HttpQueryInfo(hRequest, HTTP_QUERY_STATUS_CODE or HTTP_QUERY_FLAG_NUMBER,
@Result, Len, Reserved) then
end;
begin
Result := 0;
if not GetUrlInfo(AUrl, UrlInfo) then Exit;
hSession := InternetOpen(nil, INTERNET_OPEN_TYPE_PRECONFIG, nil, nil, 0);
try
SetTimeOut;
hConnect := InternetConnect(hSession, PChar(UrlInfo.HostName),
INTERNET_DEFAULT_HTTP_PORT, nil, nil, INTERNET_SERVICE_HTTP, 0, 0);
try
if APostStr = '' then
RequestMethod := 'GET'
else
RequestMethod := 'POST';
hRequest := HttpOpenRequest(hConnect, PChar(RequestMethod),
PChar(UrlInfo.UrlPath), 'HTTP/1.0', nil, nil,
INTERNET_FLAG_RELOAD, 0);
try
if APostStr = '' then
Header := ''
else
Header := 'Content-type: application/x-www-form-urlencoded';
HttpSendRequest(hRequest, PChar(Header),
Length(Header), PChar(APostStr), Length(APostStr));
GetHttpStatus;
if Result <> HTTP_STATUS_OK then Exit;
while True do //ストリームに書き込み
begin
if not InternetReadFile(hRequest, @Buf, SizeOf(Buf), ReadCount) then
Break;
if ReadCount = 0 then
Break
else
AStream.Write(Buf, ReadCount);
end;
finally
InternetCloseHandle(hRequest);
end;
finally
InternetCloseHandle(hConnect);
end;
finally
InternetCloseHandle(hSession);
end;
end;
■使い方■
FormにMemoとButtonを1つ置いて下さい。
また上のInternetCrackUrlのサンプルにある、GetUrlInfoという関数を使って
います。
procedure TForm1.Button6Click(Sender: TObject);
var
M: TMemoryStream;
begin
ListBox1.Items.Clear;
// if InternetAttemptConnect(0) = ERROR_SUCCESS then
begin
M := TMemoryStream.Create;
try
//Postの場合は、下の「POST」の部分に送信したい文字を入れてください。
// GetFileFromInternet(URL, POST, TStream)
//Getの場合は、POSTの欄は空白。返り値で HTTP_STATUS_OK 以外は失敗で、
//0か指定されたURLのStatusCodeが入っています。
if GetFileFromInternet('http://www.inprise.co.jp/index.html', '', M)
= HTTP_STATUS_OK then
begin
M.Position := 0;
Memo1.Lines.LoadFromStream(M);
end else
Memo1.Lines.Text := '失敗';
finally
M.Free;
end;
end;
end;
00/06/09 (Fri) ぶんぶん鈴木
Original document by ぶんぶん鈴木 氏 ID:(EZA00106)
ここにあるドキュメントは NIFTY SERVEの Delphi Users' Forum の16番会議室「玉石混淆みんなで作るSample蔵」に投稿されたサンプルです。これらのサンプルはボーランド株式会社がサポートする公式のものではありません。また、必ずしも動作が検証されているものではありません。これらのサンプルを使用したことに起因するいかなる損害も投稿者、およびフォーラムスタッフはその責めを負いません。使用者のリスクの範疇でご使用下さい。
Copyright 1996-2002 Delphi Users' Forum
|