Просмотр полной версии : Прочитать ответ скрипта средствами WinAPI
Есть пхп скрипт. В нем echo 'hello'; Как мне получить это хеллоу самым простым способом?
Делаю так:
hInet := InternetOpen('Delphi',INTERNET_OPEN_TYPE_PRECONFIG ,nil,nil,0);
hFile := InternetConnect(
hInet,
'localhost',
INTERNET_DEFAULT_HTTP_PORT,
nil,nil,
INTERNET_SERVICE_HTTP,
0,
1);
hRequest := HttpOpenRequest(
hFile,
'POST',
'test.php',
nil,
nil,
nil,
INTERNET_FLAG_NO_CACHE_WRITE,
1);
bSend := HttpSendRequest(hRequest, nil,0, nil,0);
InternetReadFile(hRequest, @Buffer, 4, BufferLen);
В результате в buffer оказываются иероглифы.
может GET... да и в результате ты получишь еще http заголовки
кстати если php исполняется у тебя на компе не в виде модуля апатча можно напрямую через пайпы запустить php.exe и выполнить указанный скрипт...
akimov_aleks
12.06.2010, 21:03
кроме get другова не чего невижу простого
Гетом сразу пробовал, тоже самое. в метатегах стоит utf-8, API тоже юникод. Сам хз что тут не так...
Overdrive
13.06.2010, 19:34
Возможно ты не правильно указал параметры функциям. Посмотри информацию о функциях в справочнике по WinAPI, а еще лучше в MSDN.
А я по твойму откуда их брал?
uses
Windows,
WinSock;
var Sock: TSocket;
addr: sockaddr_in;
wsa: wsadata;
host: PHostEnt;
Get: string;
avail_bytes: integer;
buf: pointer;
fset: TFDset;
label 2, 3;
begin
if WSAStartup(MAKEWORD(1, 1), wsa) <> 0 then ExitProcess(0);
Sock := socket(AF_INET, SOCK_STREAM, 0);
if Sock = INVALID_SOCKET then goto 3;
addr.sin_family := PF_INET;
addr.sin_port := htons(80);
host:= GetHostByName('antichat.net'); //заменишь на свой
PInteger(@addr.sin_addr.S_addr)^:= PInteger(host.h_addr^)^;
if connect(Sock, addr, sizeof(addr)) <> 0 then goto 2;
Get:= 'GET http://antichat.net HTTP/1.0' + #13#10 + #13#10; //заменишь на свой
send(Sock, PChar(Get)^, Length(Get), 0);
avail_bytes:= 0;
FD_ZERO(fset);
FD_SET(Sock, fset);
if select(0, @fset, nil, nil, nil) <= 0 then goto 2;
ioctlsocket(Sock, FIONREAD, avail_bytes);
buf:= VirtualAlloc(nil, avail_bytes, MEM_COMMIT, PAGE_READWRITE);
recv(Sock, buf^, avail_bytes, 0);
MessageBox(0, buf, nil, 0); //buf - наши данные
VirtualFree(buf, 0, MEM_RELEASE);
2: CloseSocket(Sock);
3: WSACleanUp();
end.
Попробуй сохранять код страницы в переменную таким способом:
String;
hRequest : pointer;
dwBytesRead, I, L : Cardinal;
sss: String;
dwLength: DWORD;
dwcode: array[1..20] of char;
res: String;
-------------------------------------
I:=1;
if HttpSendRequest(hRequest,PChar(sss), Length(sss), nil, 0) then
begin
repeat
dataAvaible(hRequest, L);
if L = 0 then break;
SetLength(result, L+I);
if InternetReadFile(hRequest, @result[I], sizeof(L), dwBytesRead) then
else break;
inc(I, dwBytesRead);
until dwBytesRead = 0;
result[I] := #0;
res := PChar(@dwcode);
end;
vBulletin® v3.8.14, Copyright ©2000-2026, vBulletin Solutions, Inc. Перевод: zCarot