注册 登陆
浏览模式: 标准 | 列表 全部文章

Request.ServerVariables参考

request.ServerVariables("Url")
返回服务器地址

Request.ServerVariables("Path_Info")
客户端提供的路径信息

Request.ServerVariables("Appl_Physical_Path")
与应用程序元数据库路径相应的物理路径

Request.ServerVariables("Path_Translated")
通过由虚拟至物理的映射后得到的路径

Request.ServerVariables("Script_Name")
执行脚本的名称

Request.ServerVariables("Query_String")
查询字符串內容

Request.ServerVariables("Http_Referer")
请求的字符串內容

Request.ServerVariables("Server_Port")
接受请求的服务器端口号

Request.ServerVariables("Remote_Addr")
发出请求的远程主机的IP地址

Request.ServerVariables("Remote_Host")
发出请求的远程主机名称

Request.ServerVariables("Local_Addr")
返回接受请求的服务器地址

Request.ServerVariables("Http_Host")
返回服务器地址

Request.ServerVariables("Server_Name")
服务器的主机名、DNS地址或IP地址

Request.ServerVariables("Request_Method")
提出请求的方法比如GET、HEAD、POST等等

Request.ServerVariables("Server_Port_Secure")
如果接受请求的服务器端口为安全端口时,则为1,否则为0

Request.ServerVariables("Server_Protocol")
服务器使用的协议的名称和版本

Request.ServerVariables("Server_Software")
应答请求并运行网关的服务器软件的名称和版本

Request.ServerVariables("All_Http")
客户端发送的所有HTTP标头,前缀HTTP_

Request.ServerVariables("All_Raw")
客户端发送的所有HTTP标头,其结果和客户端发送时一样,没有前缀HTTP_

Request.ServerVariables("Appl_MD_Path")
应用程序的元数据库路径

Request.ServerVariables("Content_Length")
客户端发出內容的长度

Request.ServerVariables("Https")
如果请求穿过安全通道(SSL),则返回ON如果请求来自非安全通道,则返回OFF

Request.ServerVariables("Instance_ID")
IIS实例的ID号

Request.ServerVariables("Instance_Meta_Path")
响应请求的IIS实例的元数据库路径

Request.ServerVariables("Http_Accept_Encoding")
返回內容如:gzip,deflate

Request.ServerVariables("Http_Accept_Language")
返回內容如:en-us

Request.ServerVariables("Http_Connection")
返回內容:Keep-Alive

Request.ServerVariables("Http_Cookie")
返回內容如:nVisiT%

2DYum=125;ASPSESSIONIDCARTQTRA=FDOBFFABJGOECBBKHKGPFIJI;ASPSESSIONIDCAQQTSRB=LKJJPLABABILLPCOGJGAMKAM;ASPSESSIONIDACRRSSRA=DK

HHHFBBJOJCCONPPHLKGHPB

Request.ServerVariables("Http_User_Agent")
返回內容:Mozilla/4.0(compatible;MSIE6.0;WindowsNT5.1;SV1)

Request.ServerVariables("Https_Keysize")
安全套接字层连接关键字的位数,如128

Request.ServerVariables("Https_Secretkeysize")
服务器验证私人关键字的位数如1024

Request.ServerVariables("Https_Server_Issuer")
服务器证书的发行者字段

Request.ServerVariables("Https_Server_Subject")
服务器证书的主题字段

Request.ServerVariables("Auth_Password")
当使用基本验证模式时,客户在密码对话框中输入的密码

Request.ServerVariables("Auth_Type")
是用户访问受保护的脚本时,服务器用於检验用户的验证方法

Request.ServerVariables("Auth_User")
代证的用户名

Request.ServerVariables("Cert_Cookie")
唯一的客户证书ID号

Request.ServerVariables("Cert_Flag")
客户证书标誌,如有客户端证书,则bit0为0如果客户端证书验证无效,bit1被设置为1

Request.ServerVariables("Cert_Issuer")
用户证书中的发行者字段

Request.ServerVariables("Cert_Keysize")
安全套接字层连接关键字的位数,如128

Request.ServerVariables("Cert_Secretkeysize")
服务器验证私人关键字的位数如1024

Request.ServerVariables("Cert_Serialnumber")
客户证书的序列号字段

Request.ServerVariables("Cert_Server_Issuer")
服务器证书的发行者字段

Request.ServerVariables("Cert_Server_Subject")
服务器证书的主题字段

Request.ServerVariables("Cert_Subject")
客户端证书的主题字段

Request.ServerVariables("Content_Type")
客户发送的form內容或HTTPPUT的数据类型

Request.ServerVariables("HTTP_X_FORWARDED_FOR")
可以获得位于代理(网关)后面的直接IP,当然必须这个代理支持


一些被隐藏起来的Request.ServerVariables参数:
Request.ServerVariables("NUMBER_OF_PROCESSORS")
Request.ServerVariables("OS")
Request.ServerVariables("WINDIR")
Request.ServerVariables("TEMP")
Request.ServerVariables("TMP")
Request.ServerVariables("ComSpec")
Request.ServerVariables("Os2LibPath")
Request.ServerVariables("Path")
Request.ServerVariables("PATHEXT")
Request.ServerVariables("PROCESSOR_ARCHITECTURE")
Request.ServerVariables("PROCESSOR_IDENTIFIER")
Request.ServerVariables("PROCESSOR_LEVEL")
Request.ServerVariables("PROCESSOR_REVISION")


本机ip:<%=request.servervariables("remote_addr")%>
服务器名:<%=Request.ServerVariables("SERVER_NAME")%>
服务器IP:<%=Request.ServerVariables("LOCAL_ADDR")%>
服务器端口:<%=Request.ServerVariables("SERVER_PORT")%>
服务器时间:<%=now%>
IIS版本:<%=Request.ServerVariables("SERVER_SOFTWARE")%>
脚本超时时间:<%=Server.ScriptTimeout%>
本文件路径:<%=server.mappath(Request.ServerVariables("SCRIPT_NAME"))%>
服务器CPU数量:<%=Request.ServerVariables("NUMBER_OF_PROCESSORS")%>
服务器解译引擎:<%=ScriptEngine & "/"& ScriptEngineMajorVersion&"."&ScriptEngineMinorVersion&"."& ScriptEngineBuildVersion %>
服务器操作系统:<%=Request.ServerVariables("OS")%>
支持的文件类型:<%=Request.ServerVariables("HTTP_Accept")%>
访问的文件路径:<%=Request.ServerVariables("HTTP_url")%>
用户代理的信息:<%=Request.ServerVariables("HTTP_USER_AGENT")%>



Request.ServerVariables变量意义. http代理相关知识
Request.ServerVariables["HTTP_VIA"]---------可以获得用户内部的ip
Request.ServerVariables["HTTP_X_FORWARDED_FOR"]---------可以知道代理服务器的服务器名以及端口
Request.ServerVariables["REMOTE_ADDR"]--发出请求的远程主机的IP地址。

Tags: request

http代理相关知识

关键就在HTTP_X_FORWARDED_FOR
使用不同种类代理服务器,上面的信息会有所不同:

一、没有使用代理服务器的情况:
REMOTE_ADDR = 您的 IP
HTTP_VIA = 没数值或不显示
HTTP_X_FORWARDED_FOR = 没数值或不显示

二、使用透明代理服务器的情况:Transparent Proxies
REMOTE_ADDR = 代理服务器 IP
HTTP_VIA = 代理服务器 IP
HTTP_X_FORWARDED_FOR = 您的真实 IP
这类代理服务器还是将您的信息转发给您的访问对象,无法达到隐藏真实身份的目的。

三、使用普通匿名代理服务器的情况:Anonymous Proxies
REMOTE_ADDR = 代理服务器 IP
HTTP_VIA = 代理服务器 IP
HTTP_X_FORWARDED_FOR = 代理服务器 IP
隐藏了您的真实IP,但是向访问对象透露了您是使用代理服务器访问他们的。

四、使用欺骗性代理服务器的情况:Distorting Proxies
REMOTE_ADDR = 代理服务器 IP
HTTP_VIA = 代理服务器 IP
HTTP_X_FORWARDED_FOR = 随机的 IP
告诉了访问对象您使用了代理服务器,但编造了一个虚假的随机IP代替您的真实IP欺骗它。

五、使用高匿名代理服务器的情况:High Anonymity Proxies (Elite proxies)
REMOTE_ADDR = 代理服务器 IP
HTTP_VIA = 没数值或不显示
HTTP_X_FORWARDED_FOR = 没数值或不显示

Tags: 代理

Delphi中关于listview的一些使用

//增加
   i := listview1.Items.Count;
   with ListView1 do
   begin
     ListItem:=Items.Add;
     ListItem.Caption:= IntToStr(i);
     ListItem.SubItems.Add('第 '+IntToStr(i)+' 行');
     ListItem.SubItems.Add('第三列内容');
   end;

//按标题删除
   for i:=ListView1.Items.Count-1 downto 0 Do
     if ListView1.Items[i].Caption = Edit1.Text then
     begin
       ListView1.Items.Item[i].Delete();   //删除当前选中行
     end;

//选中一行
   if ListView1.Selected <> nil then
   Edit1.Text := ListView1.Selected.Caption;

//    listview1.Items[Listview1.Items.Count -1].Selected := True;
//    listview1.Items[Listview1.Items.Count -1].MakeVisible(True);  

// 选择第一条
procedure TForm1.Button2Click(Sender: TObject);
begin
   listview1.SetFocus;
   listview1.Items[0].Selected := True;
end;

// 选择最后一条
procedure TForm1.Button1Click(Sender: TObject);  
begin
   listview1.SetFocus;
   listview1.Items[Listview1.Items.Count -1].Selected := True;
end;  

//此为调用过程,可以任意指定要移动的Item,下面是当前(Selected)Item
procedure ListViewItemMoveUpDown(lv : TListView; Item : TListItem; MoveUp, SetFocus : Boolean);
var
   DestItem : TListItem;
begin
   if (Item = nil) or
      ((Item.Index - 1 < 0) and MoveUp) or
      ((Item.Index + 1 >= lv.Items.Count) and (not MoveUp))
     then Exit;
   lv.Items.BeginUpdate;
   try
     if MoveUp then
       DestItem := lv.Items.Insert(Item.Index - 1)
     else
       DestItem := lv.Items.Insert(Item.Index + 2);
     DestItem.Assign(Item);
     lv.Selected := DestItem;
     Item.Free;
   finally
     lv.Items.EndUpdate;
   end;
   if SetFocus then lv.SetFocus;
   DestItem.MakeVisible(False);
end;


   ListViewItemMoveUpDown(ListView1, ListView1.Selected, True, True);//上移
   ListViewItemMoveUpDown(ListView1, ListView1.Selected, False, True);//下移


TListView组件使用方法

引用CommCtrl单元

procedure TForm1.Button1Click(Sender: TObject);
begin
   ListView_DeleteColumn(MyListView.Handle, i);//i是要删除的列的序号,从0开始
end;

用LISTVIEW显示表中的信息:
procedure viewchange(listv:tlistview;table:tcustomadodataset;var i:integer);
   begin
     tlistview(listv).Items.BeginUpdate;    {listv:listview名}
     try
       tlistview(listv).Items.Clear;
       with table do          {table or query名}
       begin
         active:=true;
         first;
         while not eof do
         begin
           listitem:=tlistview(listv).Items.add;
           listitem.Caption:=trim(table.fields[i].asstring);
//           listitem.ImageIndex:=8;
           next;
         end;
       end;
     finally
       tlistview(listv).Items.EndUpdate;
     end;
end;


ListView使用中的一些要点。以下以一个两列的ListView为例。
→增加一行:
with ListView1 do
   begin
     ListItem:=Items.Add;
     ListItem.Caption:='第一列内容';
     ListItem.SubItems.Add('第二列内容');
   end;
   →清空ListView1:
ListView1.Items.Clear;
   →得到当前被选中行的行的行号以及删除当前行:
For i:=0 to ListView1.Items.Count-1 Do
   If ListView1.Items[i].Selected then   //i=ListView1.Selected.index
     begin
       ListView1.Items.Delete(i);   //删除当前选中行
     end;
当然,ListView有OnSelectItem事件,可以判断选择了哪行,用个全局变量把它赋值出来。
   →读某行某列的操作:
Edit1.Text := listview1.Items[i].Caption;   //读第i行第1列
Edit2.Text := listview1.Items[i].SubItems.strings[0];   //读第i行第2列
Edit3.Text := listview1.Items[i].SubItems.strings[1];   //读第i行第3列
以次类推,可以用循环读出整列。
   →将焦点上移一行:
For i:=0 to ListView1.Items.Count-1 Do
   If (ListView1.Items[i].Selected) and (i>0) then
     begin
       ListView1.SetFocus;
       ListView1.Items.Item[i-1].Selected := True;
     end;

 引用内容
不过在Delphi7中,ListView多了一个ItemIndex属性,所以只要
ListView1.SetFocus;
ListView1.ItemIndex:=3;
就能设定焦点了。




Delphi的listview能实现交替颜色么?

 程序代码
procedure TForm1.ListView1CustomDrawItem(
   Sender: TCustomListView; Item: TListItem; State: TCustomDrawState;
   var DefaultDraw: Boolean);
var
   i: integer;
begin
   i:= (Sender as TListView).Items.IndexOf(Item);
   if odd(i) then sender.Canvas.Brush.Color:= $02E0F0D7
   else sender.Canvas.Brush.Color:= $02F0EED7;
   Sender.Canvas.FillRect(Item.DisplayRect(drIcon));
end;

Tags: listview

具有自动查找Web页面上所有链接的网络浏览器

具有自动查找Web页面上所有链接的网络浏览器

1. 概述
WEB的应用已经深入到现在社会的方方面面,作为一个软件开发人员或其他技术人员,都有可能遇见在Internet上查询大量的资料和信息的情况,一般来说用的最多的就是WEB的搜索Engine。当我们使用它查出大量的资料链接后,还有可能遇到更多的链接,但要自己去看他们是否是链接,那确实是一件很麻烦的事情。这篇文章就是来讲,如何用Delphi的MSHTML_TLB.pas来开发一个具有自动查找Web页面上所有链接的简单网络浏览器。我是在IE5的环境下写的这个程序,当然它可以向下兼容,如IE4。
2.关于MSHTML_TLB.pas
MSHTML_TLB.pas是Deliphi里面自带的一个类。它的含义是Microsoft HTML对象库。它不能够包含在所有的工程或程序中,原因是它实在是太大了,整个文件的代码共有241,899l行,那么长。大小约有12M。下面我们来看看它是如何加入到程序中的。
1. 首先,我们打开Delphi,建立一个新的application。我把form1保存为MainFrm.pas,把application保存为FindLinks.dpr.
2. 要想实现IE 的功能我们就必须要使用Microsoft HTML对象库(MSHTML type library.)如何实现呢?如图1, Project->Import Type Library:

然后你会看到关于"Microsoft HTML Object Library (Version 4.0)"的列表,如图2。
接下来可能会遇到一些问题。比如,在列表里面没有出现"Microsoft HTML Object Library (Version 4.0)"。这是为什么呢?那是IE的问题,由于IE版本的不同(我用的是IE5)。我建议最好是先查询你的计算机里面有没有mshtml.tlb这个文件。
在9x里面它是存在与C:\WINDOWS\SYSTEM目录里面,在2000里面它在\WINNT\system32目录里面。如果找到了这个文件,就可以用图2的click on the "Add..." button,然后选择mshtml.tlb,就可以了,如果没有找到它,那说明你没有安装IE或你的IE版本太低,请升级IE。
最后,当我们选择了倒入的库后,会等待一段时间,因为它实在是太长了,不过请千万不要因为是死机了。它会给自动查找提供很多帮助。
3. 工程实现。
界面设计如下图:


使用以下组件:
控件 命名 TEXT
TLabel lblURL 资料网址
TEdit edtURL http://www.huihu.com
TButton btnFindLinks 查询连接
TListBox lstbxLinks null

4. 程序设计
1. 在Form1的interface部分,在uses后面加入,OleCtrls, SHDocVw, and OleServer.这些所应用的类,都是基于我们所要创建的TinternetExplorer的,它是IE的ActiveX的对象。但是这里还有其它的方式(TinternetExplorer)进行,我们采用TwebBrowser 控制在我们的form1。
2. 我们在private里面加入如下代码:
FInternetExplorer: TInternetExplorer;
procedure WebBrowserDocumentComplete(Sender: TObject; var pDisp: OleVariant;
var URL: OleVariant);
最后用Ctrl-Shift-C完成类的声明。
3. 在impelmentation后面加入如下声明:
uses MSHTML_TLB, ComObj;
要使用的类。
4. 在form1的OnCreate事件中加入如下:
FInternetExplorer := TInternetExplorer.Create(Self);
FInternetExplorer.OnDocumentComplete := WebBrowserDocumentComplete;
5. 最后在form1的TForm1.WebBrowserDocumentComplete里面加入如下代码:
1. procedure TForm1.WebBrowserDocumentComplete(Sender: TObject;
2. var pDisp: OleVariant; var URL: OleVariant);
3. var
4. Doc: IHTMLDocument2;
5. ElementCollection: IHTMLElementCollection;
6. HtmlElement: IHTMLElement;
7. I: Integer;
8. AnchorString: string;
9. begin
10. lstbxLinks.Clear;
11. // 在处理网页的时候发现它没有完全下载,将不会进行处理连接
12. Doc := FInternetExplorer.Document as IHTMLDocument2;
13. if Doc = nil then
14. raise Exception.Create(''''Couldn''''''''t convert the ''''
15. ''''FInternetExplorer.Document to an IHTMLDocument2'''');
16. // 夺取web上的所有元素。
17. ElementCollection := Doc.all;
18. for I := 0 to ElementCollection.length - 1 do
19. begin
20. file://得到当前的元素
21. HtmlElement := ElementCollection.item(I, '''''''') as IHTMLElement;
22. // 查找网页原代码中的LINK标记。
23. // 发现其它的html标记 (例如: TABLE, FONT, etc.)
24. if HTMLElement.tagName = ''''A'''' then
25. begin
26. // 在详细的link里面抓取innerText,innertext就是标记中<href=后面的东西>例如:

27. // 我们在web里面看见"西南民族学院"
28. // <a href="http://www.swun.edu.cn"><b>西南民族学院</b></a>.
29. AnchorString := HtmlElement.innerText;
30. if AnchorString = '''''''' then
31. AnchorString := ''''(Empty Name)'''';
32. AnchorString := AnchorString '''' - ''''
33. (HtmlElement as IHTMLAnchorElement).href;
34. lstbxLinks.Items.Add(AnchorString);
35. end;
36. end;
37. end;

最后我们在button(btnFindLinks)加入Onclick 事件:
1. // 在被浏览的web里面进行查询连接。
2. FInternetExplorer.Navigate(edtURL.Text, EmptyParam, EmptyParam,
EmptyParam, EmptyParam);
从以上的程序里面我们可以看出它的原理了,实际上是很简单的,看过html原代码的人都知道,使网页产生连接的代码就是:<a href="http://www.swun.edu.cn"><b>西南民族学院</b></a>.
我程序的原理就是通过截取href后面的字符串,并在"""号后面截止。
然后把它保存为另外的字符串。然后通过TwebBrowser显示出来。
最后让我们来编译这个程序,的却,编译它很费时间,因为编译多达241,899l行的MSHTML_TLB.pas,是一件很麻烦的事情。其中还包括多达20多个的warning错误,但请放心这是MSHTML_TLB.pas的问题,与其它程序无关。这样一个小型的查找Web页面上所有链接的简单网络浏览器就出现在我们面前。本程序在IE5.0和Delphi6下编译通过。

解决WebBroswer多次载入问题

Delphi代码
  1. 因为你浏览的页面可能有框架,每个单独的框架都可能会触发DocumentComplete事件。   
  2. 正在装载数据……    
  3.   
  4. 框架集页面会最后触发DocumentComplete事件。   
  5. 发送事件的对象可以通过DocumentComplete事件的第一个参数访问   
  6.   
  7. procedure TForm1.WebBrowser1DocumentComplete(Sender: TObject;   
  8. const pDisp: IDispatch; var URL: OleVariant);   
  9. var  
  10. CurWebrowser: IWebBrowser;   
  11. TopWebBrowser: IWebBrowser;   
  12. Document: OleVariant;   
  13. WindowName: string;   
  14. begin  
  15. CurWebrowser := pDisp as IWebBrowser;   
  16. TopWebBrowser := (Sender as TWebBrowser).DefaultInterface;   
  17. if CurWebrowser = TopWebBrowser then  
  18. ShowMessage('Complete document was loaded')   
  19. else  
  20. begin  
  21. Document := CurWebrowser.Document;   
  22. WindowName := Document.ParentWindow.Name;   
  23. ShowMessage(Format('Frame "s" was loaded', [WindowName]));   
  24. end;   
  25. end;   

批处理 从A到Z 建立目录 大鸟哥帮我写的

把下面的代码保存到*.bat格式文件 执行一下就能生成A到Z的文件夹

Bat代码
  1. for %%a in (A B C D E F G H I J K L M N O P Q R S T U V W X Y Z) do mkdir %%a  

Tags: 批处理, 生成

js嵌套

页面调用广告.js
<script language=javascript src="广告.js"></script>


广告.js里再iframe广告.htm
document.write("<iframe src=广告.htm width=778 height=195 align=left frameborder=no border=0 MARGINWIDTH=0 MARGINHEIGHT=0 SCROLLING=no></iframe>")


以前写js文件。直接在行首 如下这样写document.write("<script language=javascript src=js/keycode.js></script>");在网上查询资料后才 明白 原来需要写成document.write("<scr"+"ipt language=javascript src=js/keycode.js></scr"+"ipt>");

Tags: js嵌套

关于Delphi中的Assigned

Delphi代码
  1. function assigned(var P): Boolean;   
  2.   
  3. Description   
  4.   
  5. Use Assigned to determine whether the pointer or procedure referenced by P is nil. P must be a variable reference of a pointer or procedural type. Assigned(P) corresponds to the test P<> nil for a pointer variable, and @P <> nil for a procedural variable.   
  6.   
  7. Assigned returns False if P is nil, True otherwise.   
  8.   
  9. 检查指针指向的参考变量或过程是否为nil  
  10.   
  11. 每次我通常的处理方法都是:   
  12.   
  13.  if assigned(frm) then frm.close;   但是当下次调用时就会出错。为什么呢,直到咋天我才知道原因   
  14.   
  15. frm.close;frm.free;  只是指定这块内存可以重写,并未释放为NIL 因此当下次调用时即使frm.free已经   
  16.   
  17. 执行过assigned(frm)仍为TRUE;   
  18.   
  19. 正确的处理方法:   
  20.   
  21.  if assigned(frm) then    
  22. begin  
  23.    frm.close;   
  24.    frm:=nil;   
  25. end;   
  26.   
  27. 或:   
  28.   
  29. if assigned(frm) then    
  30. begin  
  31.   frm.close;   
  32.   freeandnil(frm);   
  33. end;   
  34.   
  35. freeandnil的说明:   
  36.   
  37. procedure FreeAndNil(var Obj);   
  38.   
  39. Description   
  40.   
  41. Use FreeAndNil to ensure that a variable is nil after you free the object it references. Pass any variable that represents an object as the Obj parameter.    

Tags: assigned

ASP正则函数 大鸟哥给的好东西

ASP/Visual Basic代码
  1. Function DRexPage(Str)   
  2. Dim RegEx   
  3. If IsNull(Str) Or Str="" Then Exit Function  
  4. Set RegEx=New RegExp   
  5.     RegEx.IgnoreCase=True  
  6.     RegEx.pattern="(\&)?page=(\d)+"  
  7.     DRexPage=regEx.replace(Str,"")  '(Str,"$1")   
  8.     Set RegEx=Nothing  
  9. End Function  

在分页系统里面用到的把page后面得东西都给丢掉

Tags: 正则, 函数, 替换

自己写的函数 结合正确的Url

Delphi代码
  1. Function ChuTrueUrl(Str1,Str2 :String) :String;   
  2. begin                         
  3.   Result :=Copy(Str1,1,LastDelimiter('/',Str1)-1)+'/'+Str2;   
  4. end;  

Tags: 获取url