Home · All Classes · Modules  · QSS HELP  · QSS 案例 · VER007 HOME

QHttp Class Reference
[QtNetwork module]

该QHttp类提供了HTTP协议的实现。More...

继承QObject

Types

Methods

Qt Signals


Detailed Description

该QHttp类提供了HTTP协议的实现。

这个类提供了一个直接接口的HTTP ,使您可以下载和上传数据的HTTP协议。然而,对于新的应用程序,它是推荐使用QNetworkAccessManagerQNetworkReply作为这些类具有一个简单,但更强大的API和更现代的协议实现。

类以异步方式工作,所以没有阻挡功能。如果操作不能被立即执行,该函数将仍然返回直线距离,操作将被安排在以后执行。调度操作的结果通过信号报告。这种方法依赖于事件循环运行之中。

可以计划的操作(他们被称为在文档其馀部分“请求” )如下:setHost( )get( )post( )head()和request( ) 。

所有这些请求都返回一个唯一的标识符,可以让你保持当前执行的请求的轨道。当一个请求的执行开始时,requestStarted()信号与该标识符被发射并且当请求完成时,requestFinished( )信号被发射的标识符和一个布尔值,表示如果有错误的要求完成。

为了使一个HTTP请求必须设置合适的HTTP标头。下面的示例演示如何从Qt的网页(即网址中要求主HTML页面http://qt.nokia.com/index.html) :

 QHttpRequestHeader header("GET", QUrl.toPercentEncoding("/index.html"));
 header.setValue("Host", "qt.nokia.com");
 http->setHost("qt.nokia.com");
 http->request(header);

对于常见的HTTP请求GETPOSTHEAD, QHttp提供方便的功能get( )post()和head( ) 。他们已经在使用一个合理的标题,如果你没有设置特殊的头字段,它们更容易使用。上面的例子中,也可以写为:

 http->setHost("qt.nokia.com");                // id == 1
 http->get(QUrl.toPercentEncoding("/index.html")); // id == 2

在这个例子中的信号按以下顺序发出(以小的变化,这取决于网络的流量等) :

 requestStarted(1)
 requestFinished(1, false)

 requestStarted(2)
 stateChanged(Connecting)
 stateChanged(Sending)
 dataSendProgress(77, 77)
 stateChanged(Reading)
 responseHeaderReceived(responseheader)
 dataReadProgress(5388, 0)
 readyRead(responseheader)
 dataReadProgress(18300, 0)
 readyRead(responseheader)
 stateChanged(Connected)
 requestFinished(2, false)

 done(false)

 stateChanged(Closing)
 stateChanged(Unconnected)

dataSendProgress()和dataReadProgress如果你想显示( )在上面的例子中信号是一个非常有用progress bar以通知用户有关下载的进度。第二个参数是数据的总大小。在某些情况下这是不可能知道的总量提前,在这种情况下,第二个参数是0。 (如果您连接到一个QProgressBar共0个结果在一个繁忙的指标。 )

当响应标头被读出,有报导用responseHeaderReceived()信号。

readyRead( )信号告诉你,有数据准备好读。的数据量然后可以查询与bytesAvailable()函数,它可以读取与该read()或readAll()函数。

如果其中一个命令在命令序列的执行过程中发生了错误,所有挂起的命令(即预定的,但尚未执行的命令)被清零,并且没有信号发射它们。

例如,如果你有要求的顺序如下

 http->setHost("www.foo.bar");       // id == 1
 http->get("/index.html");           // id == 2
 http->post("register.html", data);  // id == 3

get( )请求失败,因为主机查找失败,则post()请求永远不会执行,并且信号是这样的:

 requestStarted(1)
 requestFinished(1, false)

 requestStarted(2)
 stateChanged(HostLookup)
 requestFinished(2, true)

 done(true)

 stateChanged(Unconnected)

然后,您可以获取与错误的详细信息error()和errorString()函数。请注意,只有想不到的行为,如网络故障被认为是一个错误。如果服务器响应包含错误状态,就像一个404响应,该报告为正常的反应情况。所以,你应该经常检查status code响应头中。

该功能currentId()和currentRequest( )提供有关当前正在执行的请求的更多信息。

该功能hasPendingRequests()和clearPendingRequests()允许您查询和清除挂起的请求列表。


Type Documentation

QHttp.ConnectionMode

此枚举用于指定连接使用的方式:

Constant Value Description
QHttp.ConnectionModeHttp 0 该连接是一个普通的HTTP连接到服务器
QHttp.ConnectionModeHttps 1 HTTPS协议的使用和连接使用SSL加密。

当使用HTTPS模式中,应注意连接到sslErrors信号,并处理可能出现的SSL错误。

这个枚举被引入或修改的Qt 4.3 。

See also QSslSocket

QHttp.Error

这个枚举标识所发生的错误。

Constant Value Description
QHttp.NoError 0 未发生错误。
QHttp.HostNotFound 2 该主机名查找失败。
QHttp.ConnectionRefused 3 服务器拒绝连接。
QHttp.UnexpectedClose 4 服务器关闭了连接意外。
QHttp.InvalidResponseHeader 5 服务器发送一个无效的响应头。
QHttp.WrongContentLength 6 客户端不能正确读出的内容,因为发生相对于所述内容的长度的错误。
QHttp.Aborted 7 该请求被中止与abort( ) 。
QHttp.ProxyAuthenticationRequiredError 9 QHttp是使用代理,而代理服务器需要身份验证来建立连接。
QHttp.AuthenticationRequiredError 8 该网站的服务器要求身份验证来完成请求。
QHttp.UnknownError 1 发生错误比上述指定的。

See also error( ) 。

QHttp.State

此枚举用于指定状态的客户端是:

Constant Value Description
QHttp.Unconnected 0 还有就是主机的连接。
QHttp.HostLookup 1 主机名查找正在进行中。
QHttp.Connecting 2 连接到主机的尝试正在进行中。
QHttp.Sending 3 客户端发送的请求发送到服务器。
QHttp.Reading 4 客户端的请求已发送,并且客户端读取服务器的响应。
QHttp.Connected 5 到主机的连接是打开的,但是客户端既不是发送请求,也没有等待响应。
QHttp.Closing 6 连接被关闭了,但尚未关闭。 (该状态将是Unconnected当连接关闭。 )

See also stateChanged()和state( ) 。


Method Documentation

QHttp.__init__ (self, QObject parent = None)

parent的说法,如果不是没有,原因self通过Qt的,而不是PyQt的拥有。

构造一个QHttp对象。该parent参数被传递到QObject构造函数。

QHttp.__init__ (self, QString hostName, int port = 80, QObject parent = None)

parent的说法,如果不是没有,原因self通过Qt的,而不是PyQt的拥有。

构造一个QHttp对象。后续请求都通过连接到服务器完成hostName端口port

parent参数被传递到QObject构造函数。

See also setHost( ) 。

QHttp.__init__ (self, QString hostname, ConnectionMode mode, int port = 0, QObject parent = None)

parent的说法,如果不是没有,原因self通过Qt的,而不是PyQt的拥有。

构造一个QHttp对象。后续请求都通过连接到服务器完成hostName端口port使用连接模式mode

如果端口为0 ,它会使用默认端口mode使用( 80用于HTTP和HTTPS使用443 ) 。

parent参数被传递到QObject构造函数。

See also setHost( ) 。

QHttp.abort (self)

这种方法也是一个Qt槽与C + +的签名void abort()

中止当前的请求,并删除所有已计划的请求。

对当前的请求,则requestFinished()的信号与error争论true射出。对于那些受中止( )所有其他请求,没有信号发射。

由于这个插槽也删除了预定的要求,没有离开请求和done()信号被发射(与error争论true) 。

See also clearPendingRequests( ) 。

int QHttp.bytesAvailable (self)

返回可以从响应内容被读取的时刻的字节数。

See also get( )post( )request( )readyRead( )read()和readAll( ) 。

QHttp.clearPendingRequests (self)

删除从原定的请求列表中的所有挂起的请求。这并不会影响正在执行该请求。如果你想停止这一点,使用abort( ) 。

See also hasPendingRequests()和abort( ) 。

int QHttp.close (self)

关闭连接,如果你有一个保持活动的连接,并希望将其关闭,这是很有用的。

对于发出的请求get( )post()和head( )QHttp设置连接要保持活动。您也可以使用您传递给头做到这一点request()函数。QHttp只有关闭连接到HTTP服务器,如果响应头要求它这样做。

该函数不会阻塞,而是立即返回。该请求被预定,并且是异步执行的执行。该函数返回一个唯一的标识符,它是由通过requestStarted()和requestFinished( ) 。

当该请求被启动requestStarted()信号被发射。当它完成时的requestFinished()信号被发射。

如果你想立即关闭连接,你必须使用abort( )来代替。

See also stateChanged( )abort( )requestStarted( )requestFinished()和done( ) 。

QIODevice QHttp.currentDestinationDevice (self)

返回QIODevice指针,该指针被用作用于存储正在执行的HTTP请求的数据。如果没有当前请求或者请求不将数据存储到一个IO设备,该函数返回0 。

此功能可用于删除的QIODevice在连接到插槽requestFinished()信号。

See also currentSourceDevice( )get( )post()和request( ) 。

int QHttp.currentId (self)

返回正在执行的HTTP请求或标识符0 ,如果没有请求被执行(即他们已经全部完成) 。

See also currentRequest( ) 。

QHttpRequestHeader QHttp.currentRequest (self)

返回正在执行的HTTP请求的请求头。如果请求的是一个接发setHost()或close( ) ,它返回一个无效的请求头,即QHttpRequestHeader.isValid( )返回False 。

See also currentId( ) 。

QIODevice QHttp.currentSourceDevice (self)

返回QIODevice指针,该指针被用作要执行的HTTP请求的数据源。如果没有当前请求或者请求不使用IO设备作为数据源,这个函数返回0 。

此功能可用于删除的QIODevice在连接到插槽requestFinished()信号。

See also currentDestinationDevice( )post()和request( ) 。

Error QHttp.error (self)

返回所发生的最后一个错误。接收时,此功能非常有用,找出发生了什么requestFinished()或一done()的信号与error争论true

如果你开始一个新的请求,错误状态重置为NoError

QString QHttp.errorString (self)

返回上次发生错误的人类可读的描述。接收时,这是有用的,以呈现一个错误信息给用户的requestFinished()或一done()的信号与error争论true

int QHttp.get (self, QString path, QIODevice to = None)

发送一个GET请求path通过设置服务器setHost()或在构造函数中指定。

path必须像一个绝对路径/index.html或者像一个绝对URIhttp://example.com/index.html并且必须与任一被编码QUrl.toPercentEncoding()或QUrl.encodedPath( ) 。

如果IO设备to为0的readyRead( )信号被每个新的内容数据是可读取的时间发射。

如果IO设备to不为0时,响应的内容数据直接写入到设备。确保to指针是有效的操作的持续时间(它是安全的删除当requestFinished()信号被发射) 。

Request Processing

该函数不会阻塞,而是立即返回。该请求被预定,并且是异步执行的执行。该函数返回一个唯一的标识符,它是由通过requestStarted()和requestFinished( ) 。

当该请求被启动requestStarted()信号被发射。当它完成时的requestFinished()信号被发射。

See also setHost( )post( )head( )request( )requestStarted( )requestFinished()和done( ) 。

bool QHttp.hasPendingRequests (self)

返回True如果有尚未被执行计划的任何请求,否则返回False 。

正在执行的请求not认为作为计划的要求。

See also clearPendingRequests( )currentId()和currentRequest( ) 。

int QHttp.head (self, QString path)

发送一个请求头path通过设置服务器setHost()或在构造函数中指定。

path必须像一个绝对路径/index.html或者像一个绝对URIhttp://example.com/index.html

该函数不会阻塞,而是立即返回。该请求被预定,并且是异步执行的执行。该函数返回一个唯一的标识符,它是由通过requestStarted()和requestFinished( ) 。

当该请求被启动requestStarted()信号被发射。当它完成时的requestFinished()信号被发射。

See also setHost( )get( )post( )request( )requestStarted( )requestFinished()和done( ) 。

QHttp.ignoreSslErrors (self)

这种方法也是一个Qt槽与C + +的签名void ignoreSslErrors()

告诉QSslSocket用于HTTP连接忽略报告的错误sslErrors()信号。

注意,该功能必须从连接到一个时隙内的称为sslErrors()信号有任何影响。

See also QSslSocketQSslSocket.sslErrors( ) 。

QHttpResponseHeader QHttp.lastResponse (self)

返回最近结束的HTTP请求接收到的响应报头。如果没有反应尚未收到QHttpResponseHeader.isValid( )将返回False 。

See also currentRequest( ) 。

int QHttp.post (self, QString path, QIODevice data, QIODevice to = None)

对于发送POST请求path通过设置服务器setHost()或在构造函数中指定。

path必须像一个绝对路径/index.html或者像一个绝对URIhttp://example.com/index.html并且必须与任一被编码QUrl.toPercentEncoding()或QUrl.encodedPath( ) 。

传入的数据来自经dataIO设备。

如果IO设备to为0的readyRead( )信号被每个新的内容数据是可读取的时间发射。

如果IO设备to不为0时,响应的内容数据直接写入到设备。确保to指针是有效的操作的持续时间(它是安全的删除当requestFinished()信号被发射) 。

该函数不会阻塞,而是立即返回。该请求被预定,并且是异步执行的执行。该函数返回一个唯一的标识符,它是由通过requestStarted()和requestFinished( ) 。

当该请求被启动requestStarted()信号被发射。当它完成时的requestFinished()信号被发射。

See also setHost( )get( )head( )request( )requestStarted( )requestFinished()和done( ) 。

int QHttp.post (self, QString path, QByteArray data, QIODevice to = None)

这是一个重载函数。

data作为HTTP请求的内容数据。

str QHttp.read (self, int maxlen)

阅读maxlen从响应内容字节到data并返回读取的字节数。返回-1,如果发生了错误。

See also get( )post( )request( )readyRead( )bytesAvailable()和readAll( ) 。

QByteArray QHttp.readAll (self)

读取响应内容的所有字节,并返回它们。

See also get( )post( )request( )readyRead( )bytesAvailable()和read( ) 。

int QHttp.request (self, QHttpRequestHeader header, QIODevice data = None, QIODevice to = None)

发送一个请求到所设定的服务器setHost()或在构造函数中指定。使用header作为HTTP请求头。你是负责建立一个头适合于您的要求。

传入的数据来自经dataIO设备。

如果IO设备to为0的readyRead( )信号被每个新的内容数据是可读取的时间发射。

如果IO设备to不为0时,响应的内容数据直接写入到设备。确保to指针是有效的操作的持续时间(它是安全的删除当requestFinished()信号被发射) 。

该函数不会阻塞,而是立即返回。该请求被预定,并且是异步执行的执行。该函数返回一个唯一的标识符,它是由通过requestStarted()和requestFinished( ) 。

当该请求被启动requestStarted()信号被发射。当它完成时的requestFinished()信号被发射。

See also setHost( )get( )post( )head( )requestStarted( )requestFinished()和done( ) 。

int QHttp.request (self, QHttpRequestHeader header, QByteArray data, QIODevice to = None)

这是一个重载函数。

data作为HTTP请求的内容数据。

int QHttp.setHost (self, QString hostName, int port = 80)

设置用于为请求的HTTP服务器hostName端口port

该函数不会阻塞,而是立即返回。该请求被预定,并且是异步执行的执行。该函数返回一个唯一的标识符,它是由通过requestStarted()和requestFinished( ) 。

当该请求被启动requestStarted()信号被发射。当它完成时的requestFinished()信号被发射。

See also get( )post( )head( )request( )requestStarted( )requestFinished()和done( ) 。

int QHttp.setHost (self, QString hostname, ConnectionMode mode, int port = 0)

设置用于为请求的HTTP服务器hostName端口port使用连接模式mode

如果端口为0 ,它会使用默认端口mode使用( 80用于HTTP和HTTPS使用443 ) 。

该函数不会阻塞,而是立即返回。该请求被预定,并且是异步执行的执行。该函数返回一个唯一的标识符,它是由通过requestStarted()和requestFinished( ) 。

当该请求被启动requestStarted()信号被发射。当它完成时的requestFinished()信号被发射。

See also get( )post( )head( )request( )requestStarted( )requestFinished()和done( ) 。

int QHttp.setProxy (self, QString host, int port, QString user = QString(), QString password = QString())

启用HTTP代理支持,则使用代理服务器host端口portusernamepassword如果代理服务器需要身份验证可以提供。

例如:

 void Ticker.getTicks()
 {
   http = new QHttp(this);
   connect(http, SIGNAL(done(bool)), this, SLOT(showPage()));
   http->setProxy("proxy.example.com", 3128);
   http->setHost("ticker.example.com");
   http->get("/ticks.asp");
 }

 void Ticker.showPage()
 {
   display(http->readAll());
 }

QHttp仅支持非透明web代理服务器,如鱿鱼Web代理缓存服务器(从http://www.squid.org/) 。对于透明代理,比如SOCKS5 ,使用QNetworkProxy代替。

Note:setProxy ( )之前已被调用setHost( )才能生效。如果setProxy ( )之后调用setHost( ) ,那么就不会适用,直至后setHost()被再次调用。

See also QFtp.setProxy( ) 。

int QHttp.setProxy (self, QNetworkProxy proxy)

这是一个重载函数。

从使用的代理服务器设置启用HTTP代理支持proxy。如果proxy是一个透明代理,QHttp将调用QAbstractSocket.setProxy( )底层套接字上。如果类型是QNetworkProxy.HttpCachingProxyQHttp会像以前的功能。

Note:对于使用Qt 4.3的兼容性,如果代理类型是QNetworkProxy.HttpProxy和请求类型是未加密的(也就是ConnectionModeHttp) ,QHttp将把代理的缓存代理。

int QHttp.setSocket (self, QTcpSocket socket)

取代了内部QTcpSocketQHttp与使用socket。如果你想使用自己定制的,这非常有用QTcpSocket子类,而不是纯QTcpSocketQHttp默认情况下使用。QHttp不采取插座的所有权,并不会删除socket销毁时。

该函数不会阻塞,而是立即返回。该请求被预定,并且是异步执行的执行。该函数返回一个唯一的标识符,它是由通过requestStarted()和requestFinished( ) 。

当该请求被启动requestStarted()信号被发射。当它完成时的requestFinished()信号被发射。

注意:如果QHttp用于运行其自己的事件循环的非GUI线程,你必须移动socket该线程调用setSocket ()之前。

See also QObject.moveToThread()和Thread Support in Qt

int QHttp.setUser (self, QString userName, QString password = QString())

这个函数设置的用户名userName和密码password对于需要身份验证的网页。

该函数不会阻塞,而是立即返回。该请求被预定,并且是异步执行的执行。该函数返回一个唯一的标识符,它是由通过requestStarted()和requestFinished( ) 。

当该请求被启动requestStarted()信号被发射。当它完成时的requestFinished()信号被发射。

State QHttp.state (self)

返回该对象的当前状态。当状态改变时,stateChanged()信号被发射。

See also StatestateChanged( ) 。


Qt Signal Documentation

void authenticationRequired (const QString&,quint16,QAuthenticator *)

这是该信号的默认超载。

这个信号可以在一个Web服务器发送给发射hostnameport需要验证。该authenticator对象可以被填充在与必需的细节,以便验证和持续的连接。

Note:这是不可能使用QueuedConnection连接到该信号,就好像所述认证没有被填充了新的信息时,该信号返回的连接失败。

此功能被引入Qt的4.3 。

See also QAuthenticatorQNetworkProxy

void dataReadProgress (int,int)

这是该信号的默认超载。

当这个对象读取HTTP服务器的数据来表示的下载目前的进展,这个信号被发射。

done是数据的已经到来,而且量total是数据的总量。这是可能的,应该传输的数据的总量不能确定的,在这种情况total为0 (如果您连接到一个QProgressBar,进度条显示一个繁忙的指标,如果总为0 ) 。

Warning: donetotal不一定以字节为单位的大小,因为对于大文件的这些值可能需要被“缩放”,以避免溢出。

See also dataSendProgress( )get( )post( )request()和QProgressBar

void dataSendProgress (int,int)

这是该信号的默认超载。

当这个对象将数据发送到一个HTTP服务器通知它的上传进度这个信号被发射。

done是数据的已经到来,而且量total是数据的总量。这是可能的,应该传输的数据的总量不能确定的,在这种情况total为0 (如果您连接到一个QProgressBar,进度条显示一个繁忙的指标,如果总为0 ) 。

Warning: donetotal不一定以字节为单位的大小,因为对于大文件的这些值可能需要被“缩放”,以避免溢出。

See also dataReadProgress( )post( )request()和QProgressBar

void done (bool)

这是该信号的默认超载。

这个信号被发射时的最后一个未决请求已经完成(这是后发出的最后一个请求的requestFinished( )信号) 。error是真的,如果在处理过程中发生错误,否则error是假的。

See also requestFinished( )error()和errorString( ) 。

void proxyAuthenticationRequired (const QNetworkProxy&,QAuthenticator *)

这是该信号的默认超载。

这个信号可以被发射时,一proxy需要进行身份验证时使用。该authenticator对象可以被填充在与必需的细节,以便验证和持续的连接。

Note:这是不可能使用QueuedConnection连接到该信号,就好像所述认证没有被填充了新的信息时,该信号返回的连接失败。

此功能被引入Qt的4.3 。

See also QAuthenticatorQNetworkProxy

void readyRead (const QHttpResponseHeader&)

这是该信号的默认超载。

当有新的响应数据来读取该信号被发射。

如果在其中的数据应该被写入请求中指定的一个装置,然后该信号是not射出,而是将数据直接写入到设备。

响应头中传递resp

您可以使用读取数据readAll()或read( )函数

如果你想,只要它成为可用在处理大块数据这个信号是非常有用的。如果你只关心在完整的数据,只需连接到requestFinished( )信号并读取数据,然后代替。

See also get( )post( )request( )readAll( )read()和bytesAvailable( ) 。

void requestFinished (int,bool)

这是该信号的默认超载。

处理所确定的请求时,这个信号被发射id已完成。error是真的,如果在处理过程中发生错误,否则error是假的。

See also requestStarted( )done( )error()和errorString( ) 。

void requestStarted (int)

这是该信号的默认超载。

处理所确定的请求时,这个信号被发射id开始。

See also requestFinished()和done( ) 。

void responseHeaderReceived (const QHttpResponseHeader&)

这是该信号的默认超载。

当服务器响应的HTTP标头可用这个信号被发射。报头中传递resp

See also get( )post( )head( )request()和readyRead( ) 。

void sslErrors (const QList<QSslError>&)

这是该信号的默认超载。

转发sslErrors从信号QSslSocket在使用QHttperrors是在SSL握手期间发生的错误的列表。除非你打电话ignoreSslErrors从连接到在发生错误时该信号的时隙内的() ,QHttp发射的信号后,立即将断开连接。

此功能被引入Qt的4.3 。

See also QSslSocketQSslSocket.ignoreSslErrors( ) 。

void stateChanged (int)

这是该信号的默认超载。

这个信号被发射时的状态QHttp对象更改。这个论点state是该连接的新的状态,它是一个State值。

当一个请求开始这通常发生,但是当服务器关闭连接或当调用它也可以发生close( )成功了。

See also get( )post( )head( )request( )close( )state()和State




PyQt 4.10.3 for X11 Copyright © Riverbank Computing Ltd and Nokia 2012 Qt 4.8.5