这个叫什么东西usbtraceE

单例模式_百度百科
特色百科用户权威合作手机百科
收藏 查看&单例模式
单例模式是一种常用的软件设计模式。在它的核心结构中只包含一个被称为单例类的特殊类。通过单例模式可以保证系统中一个类只有一个实例而且该实例易于外界访问,从而方便对实例个数的控制并节约系统资源。如果希望在系统中某个类的对象只能存在一个,单例模式是最好的解决方案。外文名Singleton pattern解&&&&释常用的软件设计模式
数学与中,singleton定义为“有且仅有一个元素的集合”。
单例模式最初的定义出现于《设计模式》(艾迪生维斯理, 1994):“保证一个类仅有一个实例,并提供一个访问它的全局访问点。”
Java中单例模式定义:“一个类有且仅有一个实例,并且自行实例化向整个系统提供。”
Java单例模式例子
public&class&SingletonClass{
 private&static&SingletonClass&instance=
 public&static&SingletonClassget&Instance(){
 if(instance==null){
 synchronized(SingletonClass.class){
 if(instance==null){
 instance=newSingletonClass();
 private&SingletonClass(){}
单例模式的静态结构图[1]单例模式是中最简单的形式之一。这一模式的目的是使得类的一个对象成为系统中的唯一实例。要实现这一点,可以从客户端对其进行实例化开始。因此需要用一种只允许生成对象类的唯一实例的机制,“阻止”所有想要生成对象的访问。使用工厂方法来限制实例化过程。这个方法应该是静态方法(类方法),因为让类的实例去生成另一个唯一实例毫无意义。[2]
Static uniqueInstance是singleton的唯一实例, static sharedInstance将把它返回客户端。通常,sharedInstance会检查uniqueInstance是否已经被实例化。如果没有,它会生成一个实例然后返回uniqueInstance。[2]对于系统中的某些类来说,只有一个很重要,例如,一个系统中可以存在多个打印任务,但是只能有一个正在工作的任务;一个系统只能有一个窗口管理器或文件系统;一个系统只能有一个计时工具或ID(序号)生成器。如在Windows中就只能打开一个任务管理器。如果不使用机制对窗口对象进行唯一化,将弹出多个窗口,如果这些窗口显示的内容完全一致,则是重复对象,浪费内存资源;如果这些窗口显示的内容不一致,则意味着在某一瞬间系统有多个状态,与实际不符,也会给用户带来误解,不知道哪一个才是真实的状态。因此有时确保系统中某个对象的唯一性即一个类只能有一个实例非常重要。[3]
如何保证一个类只有一个实例并且这个实例易于被访问呢?定义一个全局变量可以确保对象随时都可以被访问,但不能防止我们实例化多个对象。一个更好的解决办法是让类自身负责保存它的唯一实例。这个类可以保证没有其他实例被创建,并且它可以提供一个访问该实例的方法。这就是单例模式的模式动机。[3]显然单例模式的要点有三个;一是某个类只能有一个实例;二是它必须自行创建这个实例;三是它必须自行向整个系统提供这个实例。
从具体实现角度来说,就是以下三点:一是单例模式的类只提供私有的构造函数,二是类定义中含有一个该类的静态私有对象,三是该类提供了一个静态的共有的函数用于创建或获取它本身的静态私有对象。
在下面的对象图中,有一个&单例对象&,而&客户甲&、&客户乙& 和&客户丙&是单例对象的三个客户对象。可以看到,所有的客户对象共享一个单例对象。而且从单例对象到自身的连接线可以看出,单例对象持有对自己的引用。
一些常常设计成单例模式。
在中,需要管理的资源包括外部资源,譬如每台计算机可以有若干个打印机,但只能有一个Printer Spooler, 以避免两个打印作业同时输出到打印机中。每台计算机可以有若干传真卡,但是只应该有一个软件负责管理传真卡,以避免出现两份传真作业同时传到传真卡中的情况。每台计算机可以有若干通信端口,系统应当集中管理这些通信端口,以避免一个通信端口同时被两个请求同时调用。
需要管理的资源包括软件内部资源,譬如,大多数的软件都有一个(甚至多个)属性(properties)文件存放。这样的系统应当由一个对象来管理一个属性文件。
需要管理的软件内部资源也包括譬如负责记录网站来访人数的部件,记录软件系统内部事件、出错信息的部件,或是对系统的表现进行检查的部件等。这些部件都必须集中管理,不可整出多头。
这些资源管理器构件必须只有一个实例,这是其一;它们必须自行初始化,这是其二;允许整个系统访问自己这是其三。因此,它们都满足单例模式的条件,是单例模式的应用。一、实例控制
单例模式会阻止其他对象实例化其自己的单例对象的副本,从而确保所有对象都访问唯一实例。
二、灵活性
因为类控制了实例化过程,所以类可以灵活更改实例化过程。
[4]一、开销
虽然数量很少,但如果每次对象请求引用时都要检查是否存在类的实例,将仍然需要一些开销。可以通过使用静态初始化解决此问题。
二、可能的开发混淆
使用单例对象(尤其在类库中定义的对象)时,开发人员必须记住自己不能使用new关键字实例化对象。因为可能无法访问库源代码,因此应用程序开发人员可能会意外发现自己无法直接实例化此类。
三、对象生存期
不能解决删除单个对象的问题。在提供内存管理的语言中(例如基于.NET Framework的语言),只有单例类能够导致实例被取消分配,因为它包含对该实例的私有引用。在某些语言中(如 C++),其他类可以删除对象实例,但这样会导致单例类中出现悬浮引用。
[4]当一个类的实例可以有且只可以一个的时候就需要用到了。为什么只需要有一个呢?有人说是为了节约内存,但这只是单例模式带来的一个好处。只有一个实例确实减少内存占用,可是我认为这不是使用单例模式的理由。我认为使用单例模式的时机是当实例存在多个会引起程序逻辑错误的时候。比如类似有序的号码生成器这样的东西,怎么可以允许一个应用上存在多个呢?
Singleton模式主要作用是保证在Java中,一个类Class只有一个实例存在。
一般Singleton模式通常有三种形式:
第一种形式:懒汉式,也是常用的形式。
public&class&SingletonClass{
 private&static&Singleton&Class&instance=
 public&static&SingletonClass&getInstance(){
 if(instance==null){
 synchronized(SingletonClass.class){
 if(instance==null)
 instance=new&SingletonClass();
 private&SingletonClass(){
第二种形式:饿汉式
publicstaticclassSingleton{
//在自己内部定义自己的一个实例,只供内部调用
privatestaticfinalSingletoninstance=newSingleton();
privateSingleton(){
//dosomething
//这里提供了一个供外部访问本class的静态方法,可以直接访问
publicstaticSingletongetInstance(){
第三种形式: 双重锁的形式。
publicstaticclassSingleton{
privatestaticSingletoninstance=
privateSingleton(){
//dosomething
publicstaticSingletongetInstance(){
if(instance==null){
synchronized(Singleton.class){
if(null==instance){
instance=newSingleton();
//这个模式将同步内容下方到if内部,提高了执行的效率,不必每次获取对象时都进行同步,只有第一次才同步,创建了以后就没必要了。Flex中单例模式,常见的model层实例:
package models
import flash.events.EventD
import mx.collections.ArrayC
import vo.articlesVO;
import vo.linksVO;
[Bindable]
public class ModelLocator extends EventDispatcher
public static var _instance:ModelL
public static function getInstance():ModelLocator{
if(_instance == null){
_instance = new ModelLocator();
public var total:
public var isLogin:Boolean =
public var articles:ArrayC
public var selectedArticle:articlesVO;
public var categories:ArrayC
public var links:ArrayC
public var selectedLink:linksVO;
类中自己完成了自身的实例。。
&mx:Script&
import models.ModelL
internal function initApp():void{
var instance:ModelLocator = ModelLocator.getInstance();
trace(instance.isLogin);//获得isLogin
&/mx:Script&保证一个类仅有一个实例,并提供一个访问它的全局访问点
Singleton模式是限制而不是改进类的创建。
Singleton类中的实例构造器可以设置为Protected以允许子类派生。
Singleton模式一般不要支持Icloneable接口,因为这可能导致多个对象实例,与Singleton模式的初衷违背。
Singleton模式一般不要支持序列化,这也有可能导致多个对象实例,这也与Singleton模式的初衷违背。
Singleton只考虑了对象创建的管理,没有考虑到销毁的管理,就支持垃圾回收的平台和对象的开销来讲,我们一般没必要对其销毁进行特殊的管理。
理解和扩展Singleton模式的核心是“如何控制用户使用new对一个类的构造器的任意调用”。
可以很简单的修改一个Singleton,使它有少数几个实例,这样做是允许的而且是有意义的。
实例控制:Singleton 会阻止其他对象实例化其自己的 Singleton 对象的副本,从而确保所有对象都访问唯一实例
灵活性:因为类控制了实例化过程,所以类可以更加灵活修改实例化过程
开销:虽然数量很少,但如果每次对象请求引用时都要检查是否存在类的实例,将仍然需要一些开销。可以通过使用静态初始化解决此问题,上面的五种实现方式中已经说过了。
可能的开发混淆:使用 singleton 对象(尤其在类库中定义的对象)时,开发人员必须记住自己不能使用 new 关键字实例化对象。因为可能无法访问库,因此应用程序开发人员可能会意外发现自己无法直接实例化此类。
对象的生存期:Singleton 不能解决删除单个对象的问题。在提供的语言中(例如基于 .NET Framework 的语言),只有 Singleton 类能够导致实例被取消分配,因为它包含对该实例的私有引用。在某些语言中(如 C++),其他类可以删除
对象实例,但这样会导致 Singleton 类中出现悬浮引用。
当类只能有一个实例而且客户可以从一个众所周知的访问点访问它时。
当这个唯一实例应该是通过子类化可扩展的,并且客户应该无需更改代码就能使用一个扩展的实例时。
代码示例:
双重锁机制
namespace Singleton  {  public class Singleton  {  //定义一个私有的静态全局变量来保存该类的唯一实例  private static S
//定义一个只读静态对象  //且这个对象是在程序运行时创建的  private static readonly object syncObject = new object();
/// &summary&  /// 构造函数必须是私有的  /// 这样在外部便无法使用 new 来创建该类的实例  /// &/summary&  private Singleton()  {}
/// &summary&  /// 定义一个全局访问点  /// 设置为静态方法  /// 则在类的外部便无需实例化就可以调用该方法  /// &/summary&  /// &returns&&/returns&  public static Singleton GetInstance()  {  //这里可以保证只实例化一次  //即在第一次调用时实例化  //以后调用便不会再实例化
//第一重 singleton == null  if (singleton == null)  {  lock (syncObject)  {  //第二重 singleton == null  if (singleton == null)  {  singleton = new Singleton();  }  }  }    }  }  }varSingleton=(function(){
functioninit(){
/*这里定义单例代码*/
publicMethod:function(){
console.log('helloworld');
publicProperty:'test'
getInstance:function(){
if(!instantiated){
instantiated=init();
/*调用公有的方法来获取实例:*/
Singleton.getInstance().publicMethod();class test {
//保存类实例的私有静态成员变量
private static $_
//定义一个私有的构造函数,确保单例类不能通过new关键字实例化,只能被其自身实例化
private function __construct() {
echo 'test __construct';
//定义私有的__clone()方法,确保单例类不能被复制或克隆
private function __clone() {}
public static function getInstance() {
//检测类是否被实例化
if ( ! (self::$_instance instanceof self) ) {
self::$_instance = new test();
return self::$_
//调用单例类
test::getInstance();class CSingleton
CSingleton() //构造函数是私有的
static CSingleton *m_pI
static CSingleton * GetInstance()
if(m_pInstance == NULL) //判断是否第一次调用
m_pInstance = new CSingleton();
return m_pI
新手上路我有疑问投诉建议参考资料 查看JaegerMonkey_百度百科
特色百科用户权威合作手机百科
收藏 查看&JaegerMonkey本词条缺少概述、名片图,补充相关内容使词条更完整,还能快速升级,赶紧来吧!外文名无时&&&&间2008年
[1]JaegerMonkey是Firefox 4将要使用的新的JavaScript引擎。Firefox目前使用的JavaScript解析引擎启用于2008年,当时性能非常优秀。但随着竞争厂商陆续改善浏览器性能加入这场竞争,Firefox逐渐落后。为此,Mozilla基金会为Firefox开发全新的JaegerMonkey引擎。JaegerMonkey(J?gerMonkey,也有人拼写成JagerMonkey):Firefox 4将要使用的新的JavaScript引擎。
Firefox目前使用的JavaScript解析引擎TraceMonkey启用于2008年,当时性能非常优秀。但随着竞争厂商陆续改善浏览器性能加入这场竞争,Firefox如今在普通的JavaScript基准测试中表现落后于苹果Safari、谷歌Chrome浏览器和Opera浏览器。
为此,Mozilla基金会为Firefox开发全新的JaegerMonkey引擎。据悉,该解析引擎借用了苹果的WebKit开源项目。Mozilla意图将自己的引擎和苹果的JSCore引擎结合起来,融合为新的JaegerMonkey引擎。它将大幅提升Firefox浏览器的JavaScript代码执行速度,使Firefox在这场JavaScript性能之争中再占上风。
Mozilla目前使用了nanojit开源软件作为Firefox的本地代码生成器。Nanojit最初由Adobe开发,原本是用于加强Flash技术ActionScript代码的执行能力。2006年Adobe遵循开源软件授权许可,将nanojit发布为开源软件。Mozilla和Adobe原本计划利用nanojit创建一个名为Tamarin的开源项目,意在执行ECMAScript 4。然而,随着ECMAScript 4被弃用,Tamarin项目也几乎完全止步。Mozilla随后将nanojit软件整合至其现有的解析引擎,增加了追踪优化技术,形成了全新的引擎。
Mozilla最新的JaegerMonkey引擎里仍将使用nanojit执行某些事务,但将采用苹果旗下执行效率更高的Nitro Assembler软件来生成本地代码。这种基于方法的实时将为JaegerMonkey引擎带来性能优势。此外,JaegerMonkey仍将利用追踪优化技术来加速程序循环的执行,而进一步的优化将使执行其它路径时的速度能有所提升。Mozilla表示,这种混合技术或许会是最优秀的。
Mozilla开发人员大卫·曼德林(David Mandelin)在一篇谈及新引擎的博客里写道:“我们之所以要开发JaegerMonkey引擎,是因为在处理可追踪的代码时速度非常快,但面对不可追踪的代码时,由于需要调用因此执行效率不高。JaegerMonkey实时编译在这方面会做得更好,而且追踪技术在可用时仍能派上用场。”
新手上路我有疑问投诉建议参考资料 查看traceroute_百度百科
特色百科用户权威合作手机百科
收藏 查看&traceroute
traceroute,现代系统称为tracepath,Windows系统称为tracert,是一种电脑网络工具。它可显示数据包在IP网络经过的路由器的IP地址。别&&&&称tracert应&&&&用IP网络经过的路由器的IP地址
程序利用增加(TTL)值来实现其功能的。每当数据包经过一个路由器,其存活时间就会减1。当其存活时间是0时,主机便取消数据包,并传送一个 TTL数据包给原数据包的发出者。
程序发出的首3个数据包TTL值是1,之后3个是2,如此类推,它便得到一连串包路径。注意IP不保证每个数据包走的路径都一样。Internet,即国际互联网,是目前世界上最大的计算机网络,更确切地说是网络的网络。它由遍布全球的几万局域网和数百万台计算机组成,并通过用于异构网络的进行网间通信。互联网中,信息的传送是通过网中许多段的传输介质和设备(路由器,交换机,服务器,网关等等)从一端到达另一端。每一个连接在Internet上的设备,如主机、路由器、接入服务器等一般情况下都会有一个独立的IP地址。通过Traceroute我们可以知道信息从你的计算机到互联网另一端的主机是走的什么路径。当然每次数据包由某一同样的出发点(source)到达某一同样的目的地(destination)走的路径可能会不一样,但基本上来说大部分时候所走的路由是相同的。UNIX系统中,我们称之为Traceroute,MS Windows中为Tracert。 Traceroute通过发送小的数据包到目的设备直到其返回,来测量其需要多长时间。一条路径上的每个设备Traceroute要测3次。输出结果中包括每次测试的时间(ms)和设备的名称(如有的话)及其IP地址。tracert [-d] [-h maximum_hops] [-j computer-list] [-w timeout] target_name
该诊断实用程序通过向目的地发送具有不同生存时间 (TTL) 的 Internet 控制信息协议 (ICMP) 回应报文,以确定至目的地的路由。路径上的每个路由器都要在转发该 ICMP 回应报文之前将其 TTL 值至少减 1,因此 TTL 是有效的跳转计数。当报文的 TTL 值减少到 0 时,路由器向源系统发回 ICMP 超时信息。通过发送 TTL 为 1 的第一个回应报文并且在随后的发送中每次将 TTL 值加 1,直到目标响应或达到最大 TTL 值,Tracert 可以确定路由。通过检查中间路由器发发回的 ICMP 超时 (ime Exceeded) 信息,可以确定路由器。注意,有些路由器“安静”地丢弃生存时间 (TLS) 过期的报文并且对 tracert 无效。
指定不对计算机名解析地址。
-h maximum_hops
指定查找目标的跳转的最大数目。
-j computer-list
指定在 computer-list 中松散源路由。
-w timeout
等待由 timeout 对每个应答指定的毫秒数。
target_name
目标计算机的名称。Traceroute最简单的基本用法是:traceroute hostname
Traceroute程序的设计是利用ICMP及IP header的TTL(Time To Live)栏位(field)。首先,traceroute送出一个TTL是1的IP datagram(其实,每次送出的为3个40字节的包,包括源地址,目的地址和包发出的时间标签)到目的地,当路径上的第一个路由器(router)收到这个datagram时,它将TTL减1。此时,TTL变为0了,所以该路由器会将此datagram丢掉,并送回一个「ICMP time exceeded」消息(包括发IP包的源地址,IP包的所有内容及路由器的IP地址),traceroute 收到这个消息后,便知道这个路由器存在于这个路径上,接着traceroute 再送出另一个TTL是2 的datagram,发现第2 个路由器...... traceroute 每次将送出的datagram的TTL 加1来发现另一个路由器,这个重复的动作一直持续到某个datagram 抵达目的地。当datagram到达目的地后,该主机并不会送回ICMP time exceeded消息,因为它已是目的地了,那么traceroute如何得知目的地到达了呢?
Traceroute在送出UDP datagrams到目的地时,它所选择送达的port number 是一个一般应用程序都不会用的号码(30000 以上),所以当此UDP datagram 到达目的地后该主机会送回一个「ICMP port unreachable」的消息,而当traceroute 收到这个消息时,便知道目的地已经到达了。所以traceroute 在Server端也是没有所谓的Daemon 程式。
Traceroute提取发 ICMP TTL到期消息设备的IP地址并作域名解析。每次 ,Traceroute都打印出一系列数据,包括所经过的路由设备的域名及 IP地址,三个包每次来回所花时间。
Traceroute 有一个固定的时间等待响应(ICMP TTL到期消息)。如果这个时间过了,它将打印出一系列的*号表明:在这个路径上,这个设备不能在给定的时间内发出ICMP TTL到期消息的响应。然后,Traceroute给TTL记数器加1,继续进行。参见traceroute仿真动画.一般使用Traceroute(或者是Tracert)是基于一台主机的,但是通常您只能知道以手边的主机为源地址到互联网络上任意一台在线的主机的路由连接质量以及数据传输效率的情况,而使用基于WEB的方式,只要一台主机安装了特定的CGI程序,用户就可以通过这台主机运行相关的程序,执行Traceroute的功能。这台主机我们把它叫做Traceroute网关。Traceroute网关可以帮助用户了解网络的物理与逻辑连接的拓扑情况以及数据传输的效率。如果这种网关足够多,我们就可以方便地了解到各主机之间连接的情况了。1.几乎每一个网上人(尤其是Webmaster)对他们的计算机(或其它设备)与Internet的连接,路由(径),连通时间,速度等都很关心。使用由ChianNetMap组织起来的各地区Webmaster提供的Traceroute网关的服务,将给你一个满意的答案。从你的计算机到任何别的地方,ChinaNetMap(Traceroute)都能提供其间的每个设备(IP地址)及其连通时间。它可以让你画出通过网络的路径。
2.许多公司和单位都设有或正在设立自己的服务器-尤其是Web服务器。一旦有自己的Web服务器,随着网民数量的日益增加(包括潜在的,没法统计的网民),你一定很想知道是否他们都能与你连接。你的ISP如何与一个或多个NAP连接,以及他们的连接效率会直接影响到你的连接质量.
3.在选择ISP,骨干网连接,你站点的主机时,大多数有见识的网民喜欢检查该Site的连接性能及其它是怎样精确的与谁连,连到哪儿。ChinaNetMap(Traceroute)将给你一个完美的答案。Traceroute最早是由Van Jacobson在1988写出的小程序。当时主要是解决他自己碰到的一些网络的问题。Traceroute是一个正确理解IP网络并了解路由原理的重要工具。他们对负责网络工程技术与系统管理的Webmaster是一个使用方便的程序。
对ISP而言,设立Traceroute网关,将使网络服务提供商帮助用户建立并维持对服务商服务质量的信心。服务质量高的ISP可以通过设立Traceroute网关,使用户了解其与网络连接以及数据传输的效率。当然,基础设施差,服务质量低的ISP是比较害怕提供这种服务。因为,这样用户可以使用这一工具了解服务商网络连接情况。
在一台主机安装了相关的Traceroute的CGI程序后,您可以输入相应的目的主机的IP地址或者名字,就可以得到相关的数据。Traceroute的用法为: Traceroute [options] &IP-address or domain-name& [data size]
[options]的内容有:
[-n]:显示的地址是用数字表示而不是符号
[-v]:长输出
[-p]:UDP端口设置(缺省为33434)
[-q]:设置TTL测试数目(缺省为3)
[-t]:设置测包的服务类型
[data size]:每次测试包的数据字节长度(缺省为38)Traceroute是用来侦测主机到目的主机之间所经路由情况的重要工具,也是最便利的工具。前面说到,尽管ping工具也可以进行侦测,但是,因为ip头的限制,ping不能完全的记录下所经过的路由器。所以Traceroute正好就填补了这个缺憾。
Traceroute的原理是非常非常的有意思,它收到目的主机的IP后,首先给目的主机发送一个TTL=1(还记得TTL是什么吗?)的UDP(后面就 知道UDP是什么了)数据包,而经过的第一个路由器收到这个数据包以后,就自动把TTL减1,而TTL变为0以后,路由器就把这个包给抛弃了,并同时产生 一个主机不可达的ICMP数据报给主机。主机收到这个数据报以后再发一个TTL=2的UDP数据报给目的主机,然后刺激第二个路由器给主机发ICMP数据 报。如此往复直到到达目的主机。这样,traceroute就拿到了所有的路由器ip。从而避开了ip头只能记录有限路由IP的问题。
有人要问,我怎么知道UDP到没到达目的主机呢?这就涉及一个技巧的问题,TCP和UDP协议有一个端口号定义,而普通的网络程序只监控少数的几个号码较 小的端口,比如说80,比如说23,等等。而traceroute发送的是端口号&30000(真变态)的UDP报,所以到达目的主机的时候,目的 主机只能发送一个端口不可达的ICMP数据报给主机。主机接到这个报告以后就知道,主机到了,所以,说Traceroute是一个骗子一点也不为过:)
Traceroute程序里面提供了一些很有用的选项,甚至包含了IP选路的选项,请察看man文档来了解这些,这里就不赘述了。
新手上路我有疑问投诉建议参考资料 查看curl_百度百科
特色百科用户权威合作手机百科
收藏 查看&curl
curl是利用URL语法在命令行方式下工作的开源工具。它被广泛应用在Unix、多种Linux发行版中,并且有DOS和Win32、Win64下的移植版本。类&&&&别用URL语法适用范围计算机
使用命令:curl http://curl.haxx. se
这是最简单的使用方法。用这个命令获得了http://curl.haxx. se指向的页面,同样,如果这里的URL指向的是一个文件或者一幅图都可以直接下载到本地。如果下载的是HTML文档,那么缺省的将不显示文件头部,即HTML文档的header。要全部显示,请加参数 -i,要只显示头部,用参数 -I。任何时候,可以使用 -v 命令看curl是怎样工作的,它向服务器发送的所有命令都会显示出来。为了,可以使用-r参数来指定传输范围。在WEB页面设计中,form是很重要的元素。Form通常用来收集并向网站提交信息。提交信息的方法有两种,GET方法和POST方法。先讨论GET方法,例如在页面中有这样一段:
&form method=&GET& action=&junk.cgi&&
&input type=text name=&birthyear&&
&input type=submit name=press value=&OK&&
那么上会出现一个和一个标为“OK”的按钮。按下这个按钮,就用GET方法向服务器提交的数据。
例如原始页面是在 www.hotmail. com/when/birth.html看到的,然后您在中输入1905,然后按OK按钮,那么的URL现在应该是:“www.hotmail. com/when/junk.cgi?birthyear=1905&press=OK”
对于这种网页,curl可以直接处理,例如想获取上面的网页,只要输入:
curl &www.hotmail. com/when/junk.cgi?birthyear=1905&press=OK&
就可以了。
用来提交信息的第二种方法叫做POST方法,POST方法和GET方法的区别在于GET方法使用的时候,中会产生目标URL,而POST不会。类似GET,这里有一个网页:
&form method=&POST& action=&junk.cgi&&
&input type=text name=&birthyear&&
&input type=submit name=press value=&OK&&
上也会出现一个和一个标为“OK”的按钮。按下这个按钮,用POST方法向服务器提交数据。
这时的URL是看不到的,因此需要使用特殊的方法来抓取这个页面:
curl -d &birthyear=1905&press=OK& www.hotmail. com/when/junk.cgi
这个命令就可以做到。
1995年年末,RFC 1867定义了一种新的POST方法,用来上传文件。主要用于把本地文件上传到服务器。此时页面是这样写的:
&form method=&POST& enctype='multipart/form-data' action=&upload.cgi&&
&input type=file name=upload&
&input type=submit name=press value=&OK&&
对于这种页面,curl的用法不同:
curl -F upload=@localfilename -F press=OK URL
这个命令的实质是将本地的文件用POST上传到服务器。
有关POST还有不少用法,用户可以自己摸索。文件上传的标准方法是使用PUT,此时curl命令使用-T参数:
curl -T uploadfile www.uploadhttp. com/receive.cgicurl可以处理各种情况的认证页面,例如下载用户名/密码认证方式的页面(在IE中通常是出现一个输入用户名和密码的输入框):
curl -u name:password www.secrets. com
如果网络是通过http出去的,而代理服务器需要用户名和密码,那么输入:
curl -U proxyuser:proxypassword http://curl.haxx. se
任何需要输入用户名和密码的时候,只在参数中指定用户名而空着密码,curl可以交互式的让用户输入密码。有些访问的时候必须经过另外一个网络地址跳转过去,这用术语来说是:referer,引用。
对于这种地址的资源,curl也可以下载:
curl -e http://curl.haxx. se daniel.haxx. se有些首先需要判断用户使用的是什么,符合标准了才能够下载或者浏览。
此时curl可以把自己“伪装”成任何其他:
curl -A &Mozilla/4.0 ( MSIE 5.01; Windows NT 5.0)& URL
这个指令表示curl伪装成了IE5.0,用户平台是Windows 2000。(对方服务器是根据这个字串来判断的类型的,所以即使使用AIX也无所谓)。
curl -A &Mozilla/4.73 [en] (X11; U; Linux 2.2.15 i686)& URL
此时curl变成了Netscape,运行在PIII平台的Linux上了。Cookie是服务器经常使用的一种记忆客户信息的方法。如果cookie被记录在了文件中,那么使用命令:
curl -b stored_cookies_in_file www.cookiesite. com
curl可以根据旧的cookie写出新cookie并发送到网站:
curl -b cookies.txt -c newcookies.txt www.cookiesite. com如果是通过OpenSSL加密的https协议传输的网页,curl可以直接访问:
curl https://that.secure.server. com如果是采用证书认证的http地址,证书在本地,那么curl这样使用:
curl -E mycert.pem https://that.secure.server. comcurl非常博大,用户要想使用好这个工具,除了详细学习参数之外,还需要深刻理解http的各种协议与URL的各个语法。
这里推荐几个读物:
RFC 2616 HTTP协议语法的定义。
RFC 2396 URL语法的定义。
RFC 2109 Cookie是怎样工作的。
RFC 1867 HTTP如何POST,以及POST的格式。linux curl命令
-a/--append 上传文件时,附加到目标文件
-A/--user-agent &string& 设置用户代理发送给服务器
- anyauth 可以使用“任何”身份验证方法
-b/--cookie &name=string/file& cookie字符串或文件读取位置
- basic 使用HTTP基本验证
-B/--use-ascii 使用ASCII /文本传输
-c/--cookie-jar &file& 操作结束后把cookie写入到这个文件中
-C/--continue-at &offset& 断点续转
-d/--data &data& HTTP POST方式传送数据
--data-ascii &data& 以ascii的方式post数据
--data-binary &data& 以二进制的方式post数据
--negotiate 使用HTTP身份验证
--digest 使用数字身份验证
--disable-eprt 禁止使用EPRT或LPRT
--disable-epsv 禁止使用EPSV
-D/--dump-header &file& 把header信息写入到该文件中
--egd-file &file& 为随机数据(SSL)设置EGD socket路径
--tcp-nodelay 使用TCP_NODELAY选项
-e/--referer 来源网址
-E/--cert &cert[:passwd]& 客户端证书文件和密码 (SSL)
--cert-type &type& 证书文件类型 (DER/PEM/ENG) (SSL)
--key &key& 私钥文件名 (SSL)
--key-type &type& 私钥文件类型 (DER/PEM/ENG) (SSL)
--pass &pass& 私钥密码 (SSL)
--engine &eng& 加密引擎使用 (SSL). &--engine list& for list
--cacert &file& CA证书 (SSL)
--capath &directory& CA目录 (made using c_rehash) to verify peer against (SSL)
--ciphers &list& SSL密码
--compressed 要求返回是压缩的形势 (using deflate or gzip)
--connect-timeout &seconds& 设置最大请求时间
--create-dirs 建立本地目录的目录层次结构
--crlf 上传是把LF转变成CRLF
-f/--fail 连接失败时不显示http错误
--ftp-create-dirs 如果远程目录不存在,创建远程目录
--ftp-method [multicwd/nocwd/singlecwd] 控制CWD的使用
--ftp-pasv 使用 PASV/EPSV 代替端口
--ftp-skip-pasv-ip 使用PASV的时候,忽略该IP地址
--ftp-ssl 尝试用 SSL/TLS 来进行ftp数据传输
--ftp-ssl-reqd 要求用 SSL/TLS 来进行ftp数据传输
-F/--form &name=content& 模拟http表单提交数据
-form-string &name=string& 模拟http表单提交数据
-g/--globoff 禁用网址序列和范围使用{}和[]
-G/--get 以get的方式来发送数据
-h/--help 帮助
-H/--header &line&自定义头信息传递给服务器
--ignore-content-length 忽略的HTTP头信息的长度
-i/--include 输出时包括protocol头信息
-I/--head 只显示文档信息
从文件中读取-j/--junk-session-cookies忽略会话Cookie
- 界面&interface&指定网络接口/地址使用
- krb4 &级别&启用与指定的安全级别krb4
-j/--junk-session-cookies 读取文件进忽略session cookie
--interface &interface& 使用指定网络接口/地址
--krb4 &level& 使用指定安全级别的krb4
-k/--insecure 允许不使用证书到SSL站点
-K/--config 指定的配置文件读取
-l/--list-only 列出ftp目录下的文件名称
--limit-rate &rate& 设置传输速度
--local-port&NUM& 强制使用本地端口号
-m/--max-time &seconds& 设置最大传输时间
--max-redirs &num& 设置最大读取的目录数
--max-filesize &bytes& 设置最大下载的文件总量
-M/--manual 显示全手动
-n/--netrc 从netrc文件中读取用户名和密码
--netrc-optional 使用 .netrc 或者 URL来覆盖-n
--ntlm 使用 HTTP NTLM 身份验证
-N/--no-buffer 禁用缓冲输出
-o/--output 把输出写到该文件中
-O/--remote-name 把输出写到该文件中,保留远程文件的文件名
-p/--proxytunnel 使用HTTP代理
--proxy-anyauth 选择任一代理身份验证方法
--proxy-basic 在代理上使用基本身份验证
--proxy-digest 在代理上使用数字身份验证
--proxy-ntlm 在代理上使用ntlm身份验证
-P/--ftp-port &address& 使用端口地址,而不是使用PASV
-Q/--quote &cmd&文件传输前,发送命令到服务器
-r/--range &range&检索来自HTTP/1.1或FTP服务器字节范围
--range-file 读取(SSL)的随机文件
-R/--remote-time 在本地生成文件时,保留远程文件时间
--retry &num& 传输出现问题时,重试的次数
--retry-delay &seconds& 传输出现问题时,设置重试间隔时间
--retry-max-time &seconds& 传输出现问题时,设置最大重试时间
-s/--silent静音模式。不输出任何东西
-S/--show-error 显示错误
--socks4 &host[:port]& 用socks4代理给定主机和端口
--socks5 &host[:port]& 用socks5代理给定主机和端口
--stderr &file&
-t/--telnet-option &OPT=val& Telnet选项设置
--trace &file& 对指定文件进行debug
--trace-ascii &file& Like --跟踪但没有hex输出
--trace-time 跟踪/详细输出时,添加时间戳
-T/--upload-file &file& 上传文件
--url &URL& Spet URL to work with
-u/--user &user[:password]&设置服务器的用户和密码
-U/--proxy-user &user[:password]&设置代理用户名和密码
-v/--verbose
-V/--version 显示版本信息
-w/--write-out [format]什么输出完成后
-x/--proxy &host[:port]&在给定的端口上使用HTTP代理
-X/--request &command&指定什么命令
-y/--speed-time 放弃限速所要的时间。默认为30
-Y/--speed-limit 停止传输速度的限制,速度时间'秒
-z/--time-cond 传送时间设置
-0/--http1.0 使用HTTP 1.0
-1/--tlsv1 使用TLSv1(SSL)
-2/--sslv2 使用SSLv2的(SSL)
-3/--sslv3 使用的SSLv3(SSL)
--3p-quote like -Q for the source URL for 3rd party transfer
--3p-url 使用url,进行第三方传送
--3p-user 使用用户名和密码,进行第三方传送
-4/--ipv4 使用IP4
-6/--ipv6 使用IP6
-#/--progress-bar 用进度条显示当前的传送状态PHP cURL 函数
PHP[1]支持的由Daniel Stenberg创建的libcurl库允许你与各种的服务器使用各种类型的协议进行连接和通讯。
libcurl目前支持http、https、ftp、gopher、telnet、dict、file和ldap协议。libcurl同时也支持HTTPS认证、HTTP POST、HTTP PUT、 FTP 上传(这个也能通过PHP的FTP扩展完成)、HTTP 基于表单的上传、代理、cookies和用户名+密码的认证。
PHP中使用cURL实现Get和Post请求的方法
这些函数在PHP 4.0.2中被引入。
以下包含了PHP cURL函数列表:
curl_close()
关闭一个cURL会话。
curl_copy_handle()
复制一个cURL句柄和它的所有选项。
curl_errno()
返回最后一次的错误号。
curl_error()
返回一个保护当前会话最近一次错误的字符串。
curl_escape()
返回转义字符串,对给定的字符串进行URL编码。
curl_exec()
执行一个cURL会话。
curl_file_create()
创建一个 CURLFile 对象。
curl_getinfo()
获取一个cURL连接资源句柄的信息。
curl_init()
初始化一个cURL会话。
curl_multi_add_handle()
向curl批处理会话中添加单独的curl句柄。
curl_multi_close()
关闭一组cURL句柄。
curl_multi_exec()
运行当前 cURL 句柄的子连接。
curl_multi_getcontent()
如果设置了CURLOPT_RETURNTRANSFER,则返回获取的输出的文本流。
curl_multi_info_read()
获取当前解析的cURL的相关传输信息。
curl_multi_init()
返回一个新cURL批处理句柄。
curl_multi_remove_handle()
移除curl批处理句柄资源中的某个句柄资源。
curl_multi_select()
等待所有cURL批处理中的活动连接。
curl_multi_setopt()
设置一个批处理cURL传输选项。
curl_multi_strerror()
返回描述错误码的字符串文本。
curl_pause()
暂停及恢复连接。
curl_reset()
重置libcurl的会话句柄的所有选项。
curl_setopt_array()
为cURL传输会话批量设置选项。
curl_setopt()
设置一个cURL传输选项。
curl_share_close()
关闭cURL共享句柄。
curl_share_init()
初始化cURL共享句柄。
curl_share_setopt()
设置一个共享句柄的cURL传输选项。
curl_strerror()
返回错误代码的字符串描述。
curl_unescape()
解码URL编码后的字符串。
curl_version()
获取cURL版本信息。
新手上路我有疑问投诉建议参考资料 查看

我要回帖

更多关于 trace bundy 的文章

 

随机推荐