Форум: "WinAPI";
Текущий архив: 2013.03.22;
Скачать: [xml.tar.bz2];
Внизполучение html-страницы post-запросом Найти похожие ветки
← →
Dy1 (2010-01-07 10:55) [0]Что я делаю не так? Данные не возвращаются
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", "");
← →
Dy1 (2010-01-07 10:57) [1]поправка - чистый html (начало) идёт, не возвращаются значения переменных
← →
Dy1 (2010-01-07 11:04) [2]исправил на
HttpSendRequest( FInetRequest, "Content-type: application/x-www-form-urlencoded"#10#13
и заработало.
← →
Дмитрий С © (2010-01-07 21:48) [3]Спасибо за пример:)
Страницы: 1 вся ветка
Форум: "WinAPI";
Текущий архив: 2013.03.22;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.097 c