感谢
解决方案 »
- 请问谁知道客户端不用安装ORacle就可与数据库服务器通讯?
- 菜菜鸟 求1+2+3……+36=?的算法
- 求教TNMFTP的问题
- 100分跪求:函数中为什么不能用ADOQuery????
- 存储过程参数问题
- 关于QReport报表的问题,高手帮忙,急死人了。解决了问题的再开贴给100分
- 请教:详细介绍 构造、析构、重载、虚函数、消息、句柄几个概念含义 并用代码示例
- 修改DBGrid中列的Width属性后,运行时列宽度还是很宽。。。
- 怎样才可以多增加可用分?专家分有什么用?
- 如何获得一个目录下的所以文件名,以及特定格式的所有文件名(如所以word文档的名称)
- 问个Access问题。
- 请海天子大侠进来拿分
<TNMHTTP>.Head(url);
通过<TNMHTTP>.Header取到标题信息Get方法得到网页文件内容和cookie信息分别存在Body和CookieIn 属性
比如我想发送这个头信息访问163.com的80端口:
delphi6的User-Agent 是Mozilla/3.0 (compatible; indy)
我要在访问时改变这个上传的参数:
'User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)'
用TNMHTTP就办不到的
我试过用winsock就访问不了80端口的东东,晕在此贴段代码出请高手指教(在VC,VB 发送报头很容易办到)//1、建立Socket
meminfo.Clear;
skt:=socket(AF_INET,SOCK_STREAM,0);
if(skt=INVALID_SOCKET)Then
begin
memInfo.Lines.Add('Error:Create Winsock Failed');
exit;
end;
//2、连接主机
ZeroMemory(@addr,sizeof(addr));
Addr.sin_family:=AF_INET;
//Addr.sin_addr.S_addr :=inet_addr(edtHost.Text);
Addr.sin_addr.S_addr:=inet_addr(Pchar(edtHost.Text));
//开放80端口
addr.sin_port:=htons(80);
Re:=connect(skt,addr,sizeof(addr));
if(Re<>0)then
begin
memInfo.Lines.Add('Connect to Server Failed!');
exit;
end; StrSend := 'GET www.163.com HTTP/1.1' + #13+#10;
StrSend := StrSend + 'HOST: 163.com + #13+#10;
StrSend := StrSend + 'Accept: text/plain' + #13+#10;
StrSend := StrSend +'Accept: application/html'+#13+#10;
StrSend := StrSend +'Accept: text/html'+#13+#10;
StrSend := StrSend +'Accept: image/gif'+#13+#10;
StrSend := StrSend +'Accept: */*'+#13+#10;
StrSend := StrSend +'Accept -Encoding: gzip'+#13+#10;
StrSend := StrSend +'User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)'+#13+#10;
StrSend := StrSend +'Content-type: application/x-www-form-urlencoded'+#13+#10;
StrSend := StrSend +#13+#13;
//3、发送信息
GETMem(BufSend,1024);
ZeroMemory(BufSend,1024);
Info:=StrSend+#10;
StrPCopy(BufSend,info);
Re:=Send(skt,Bufsend^,Length(BufSend),0);
if(Re=SOCKET_ERROR)then
begin
memInfo.Lines.Add('Send Data Failed!');
exit;
end;
//5、读取主机返回信息
GetMem(BufRev,1024);
Repeat
ZeroMemory(BufRev,1024);
re:=recv(skt,BufRev^,1024,0);
Info:=Strpas(bufRev);
memInfo.Lines.Add(Info);
Until re=0;
memInfo.Lines.Add('FINISH!');
FreeMem(BufSend);
FreeMem(BufRev);
//6、关闭socket连接
closesocket(skt);
建议你发HTTP/1.0的请求,而不是1.1的.关键的就是这么一串,其它的使用缺省值,除非有必要..'GET www.163.com HTTP/1.1'+#13#10+#13#10
使用TClientSocket,非阻塞方式就可以了..
1,请求头用两个回车换行结尾.即#13#10#13#10
2,请求头用#13#10分隔为多行.从第二行开始是参数行,使用'名称-值'对的方式,
参数名与值之间':'+空格 分隔.
3,参数行可以扩展,加入应用程序需要的参数名和值..另一方面,很多参数值可以省略.
..
'GET www.163.com HTTP/1.1'+#13#10+#13#10应该改成
'GET www.163.com HTTP/1.0'+#13#10+#13#10
HTTP1.1协议要严格些,另有几个参数是必须的.