我想通过,socket发送http请求的方法,往某个网页,发送一个字符串请问该怎么写?请大家看看我的代码,如下:
function PostURLSock(str:string):boolean;
var
s:Tsocket;
wsda:Twsadata;
sai:Sockaddr_in;
ph:phostent;
info:string;
buff:array[0..63]of char;
begin
if 0<>wsastartup(makeword(2,2),wsda) then exit;
s:=socket(AF_INET,Sock_STREAM,0);
ph:=gethostbyname('http://xxxx.com');//目标主机 sai.sin_family:=AF_INET;
sai.sin_addr.S_addr:=Lpdword(lpdword(ph.h_addr_list)^)^;
sai.sin_port:=htons(80); if socket_error=connect(s,sai,sizeof(sai)) then exit; info :='GET / http 1.1'+#13#10;
info := info +'Accept:*/*' +#13#10;
info := info +'http://xxx/yyyy.asp '+#13#10; //目标网页
info := info +str+#13#10; //str就是我要发的字符串,这地方是我自己乱加的,不知道该怎么写
if socket_error=send(s,pchar(info)^,length(info),0) then exit; if socket_error=recv(s,buff,sizeof(buff),0) then exit;
result:=true; WSACleanup();
end;
请大家帮我实现一下
function PostURLSock(str:string):boolean;
var
s:Tsocket;
wsda:Twsadata;
sai:Sockaddr_in;
ph:phostent;
info:string;
buff:array[0..63]of char;
begin
if 0<>wsastartup(makeword(2,2),wsda) then exit;
s:=socket(AF_INET,Sock_STREAM,0);
ph:=gethostbyname('http://xxxx.com');//目标主机 sai.sin_family:=AF_INET;
sai.sin_addr.S_addr:=Lpdword(lpdword(ph.h_addr_list)^)^;
sai.sin_port:=htons(80); if socket_error=connect(s,sai,sizeof(sai)) then exit; info :='GET / http 1.1'+#13#10;
info := info +'Accept:*/*' +#13#10;
info := info +'http://xxx/yyyy.asp '+#13#10; //目标网页
info := info +str+#13#10; //str就是我要发的字符串,这地方是我自己乱加的,不知道该怎么写
if socket_error=send(s,pchar(info)^,length(info),0) then exit; if socket_error=recv(s,buff,sizeof(buff),0) then exit;
result:=true; WSACleanup();
end;
请大家帮我实现一下
先get该页面,然后找到它的表单域,也就是那个<form></form>其中有一个再找到其链接地址,以及相应需要填充的内容,再进行post.post的Http头后面,跟上那些需要填充的内容,比如有个text叫'name',那就跟上'name=yourname',多个之间使用'&'分隔,post的HTTP头,指明这些内容有多少字节数。