![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
получение html-страницы post-запросом
Dy1 © (2010-01-07 10:55:00)Что я делаю не так? Данные не возвращаются
function TForm1.PostData(Data: ansiString; const URL: String): String;
var
Server, Path, Extra: String;
Scheme, Port, Flags, Ctx: Integer;
Status, Index, Size, Downloaded: DWord;
FInetRoot, FInetConnect, FInetRequest: HInternet;
Buffer: String;
const
AcceptTypes: array [0..1] of PChar = ('text/xml', nil);
begin
FInetRequest := nil;
FInetConnect := nil;
// SplitURL(URL, Server, Path, Extra, Scheme, Port);
// на время отладки!
server := 'dy.cdrrhq.ru';
path := '/';
extra := 's';
scheme := INTERNET_SCHEME_HTTP;
port := INTERNET_DEFAULT_HTTP_PORT;
Ctx := Random(MaxInt);
{ Try to connect into the internet }
FInetRoot := InternetOpen( 'h', INTERNET_OPEN_TYPE_PRECONFIG, nil, nil, 0);
try
// Try to connect to internet service
FInetConnect := InternetConnect(FInetRoot, PChar(Server), Port, nil, nil, INTERNET_SERVICE_HTTP, 0, Ctx);
// Send request
Flags := INTERNET_FLAG_KEEP_CONNECTION or INTERNET_FLAG_NO_CACHE_WRITE;
if Scheme = INTERNET_SCHEME_HTTPS then
Flags := Flags or INTERNET_FLAG_SECURE;
FInetRequest := HttpOpenRequest( FInetConnect, 'POST', PChar(Path + Extra), nil, nil, @AcceptTypes, Flags, Ctx);
HttpSendRequest(FInetRequest, nil{заголовки}, 0{их длина}, PChar(Data){принятая строка}, Length(Data));
// Check for error reply
Size := SizeOf(Status);
index := 0;
if HttpQueryInfo(FInetRequest, HTTP_QUERY_STATUS_CODE or HTTP_QUERY_FLAG_NUMBER, @Status, Size, index)
and (Status >= 300) then
begin
// If Web server returns reply code as 300 or more, retrieve error description
Size := 1024;
SetLength(Buffer, Size);
if HttpQueryInfo( FInetRequest, HTTP_QUERY_STATUS_TEXT, @Buffer[1], Size, Index) then
begin
// signal web server error
SetLength(Buffer, Size);
msgok(Buffer);
Exit;//ХЗ как отработает
end;
end;
// If reply is positive, read Buffers
Result := '';
repeat
InternetQueryDataAvailable( FInetRequest, Size, 0, Ctx);
if Size > 0 then
begin
SetLength(Buffer, Size);
InternetReadFile( FInetRequest, @Buffer[1], Size, Downloaded);
SetLength(Buffer, Downloaded);
Result := Result + Buffer;
end;
until Size = 0;
finally
InternetCloseHandle(FInetRequest);
InternetCloseHandle(FInetConnect);
InternetCloseHandle(FInetRoot);
end;
end;
procedure TForm1.Button1Click(Sender: PObj);
begin
memo1.Text := PostData('n1=1&n2=b&n3=5', '');
Дмитрий С (2010-01-07 21:48:00) [1]Спасибо за пример:)
Dy1 (2010-01-07 11:04:00) [2]исправил на
HttpSendRequest( FInetRequest, 'Content-type: application/x-www-form-urlencoded'#10#13
и заработало.
Dy1 (2010-01-07 10:57:00) [3]поправка - чистый html (начало) идёт, не возвращаются значения переменных