Home · All Classes · Modules · QSS HELP · QSS 案例 · VER007 HOME |
该QHttp类提供了HTTP协议的实现。More...
继承QObject。
该QHttp类提供了HTTP协议的实现。
这个类提供了一个直接接口的HTTP ,使您可以下载和上传数据的HTTP协议。然而,对于新的应用程序,它是推荐使用QNetworkAccessManager和QNetworkReply作为这些类具有一个简单,但更强大的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请求GET,POST和HEAD, 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()允许您查询和清除挂起的请求列表。
此枚举用于指定连接使用的方式:
Constant | Value | Description |
---|---|---|
QHttp.ConnectionModeHttp | 0 | 该连接是一个普通的HTTP连接到服务器 |
QHttp.ConnectionModeHttps | 1 | HTTPS协议的使用和连接使用SSL加密。 |
当使用HTTPS模式中,应注意连接到sslErrors信号,并处理可能出现的SSL错误。
这个枚举被引入或修改的Qt 4.3 。
See also QSslSocket。
这个枚举标识所发生的错误。
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( ) 。
此枚举用于指定状态的客户端是:
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( ) 。
该parent的说法,如果不是没有,原因self通过Qt的,而不是PyQt的拥有。
构造一个QHttp对象。该parent参数被传递到QObject构造函数。
该parent的说法,如果不是没有,原因self通过Qt的,而不是PyQt的拥有。
构造一个QHttp对象。后续请求都通过连接到服务器完成hostName端口port。
该parent参数被传递到QObject构造函数。
See also setHost( ) 。
该parent的说法,如果不是没有,原因self通过Qt的,而不是PyQt的拥有。
构造一个QHttp对象。后续请求都通过连接到服务器完成hostName端口port使用连接模式mode。
如果端口为0 ,它会使用默认端口mode使用( 80用于HTTP和HTTPS使用443 ) 。
该parent参数被传递到QObject构造函数。
See also setHost( ) 。
这种方法也是一个Qt槽与C + +的签名void abort()。
中止当前的请求,并删除所有已计划的请求。
对当前的请求,则requestFinished()的信号与error争论true射出。对于那些受中止( )所有其他请求,没有信号发射。
由于这个插槽也删除了预定的要求,没有离开请求和done()信号被发射(与error争论true) 。
See also clearPendingRequests( ) 。
返回可以从响应内容被读取的时刻的字节数。
See also get( )post( )request( )readyRead( )read()和readAll( ) 。
删除从原定的请求列表中的所有挂起的请求。这并不会影响正在执行该请求。如果你想停止这一点,使用abort( ) 。
See also hasPendingRequests()和abort( ) 。
关闭连接,如果你有一个保持活动的连接,并希望将其关闭,这是很有用的。
对于发出的请求get( )post()和head( )QHttp设置连接要保持活动。您也可以使用您传递给头做到这一点request()函数。QHttp只有关闭连接到HTTP服务器,如果响应头要求它这样做。
该函数不会阻塞,而是立即返回。该请求被预定,并且是异步执行的执行。该函数返回一个唯一的标识符,它是由通过requestStarted()和requestFinished( ) 。
当该请求被启动requestStarted()信号被发射。当它完成时的requestFinished()信号被发射。
如果你想立即关闭连接,你必须使用abort( )来代替。
See also stateChanged( )abort( )requestStarted( )requestFinished()和done( ) 。
返回QIODevice指针,该指针被用作用于存储正在执行的HTTP请求的数据。如果没有当前请求或者请求不将数据存储到一个IO设备,该函数返回0 。
此功能可用于删除的QIODevice在连接到插槽requestFinished()信号。
See also currentSourceDevice( )get( )post()和request( ) 。
返回正在执行的HTTP请求或标识符0 ,如果没有请求被执行(即他们已经全部完成) 。
See also currentRequest( ) 。
返回正在执行的HTTP请求的请求头。如果请求的是一个接发setHost()或close( ) ,它返回一个无效的请求头,即QHttpRequestHeader.isValid( )返回False 。
See also currentId( ) 。
返回QIODevice指针,该指针被用作要执行的HTTP请求的数据源。如果没有当前请求或者请求不使用IO设备作为数据源,这个函数返回0 。
此功能可用于删除的QIODevice在连接到插槽requestFinished()信号。
See also currentDestinationDevice( )post()和request( ) 。
返回所发生的最后一个错误。接收时,此功能非常有用,找出发生了什么requestFinished()或一done()的信号与error争论true。
如果你开始一个新的请求,错误状态重置为NoError。
返回上次发生错误的人类可读的描述。接收时,这是有用的,以呈现一个错误信息给用户的requestFinished()或一done()的信号与error争论true。
发送一个GET请求path通过设置服务器setHost()或在构造函数中指定。
path必须像一个绝对路径/index.html或者像一个绝对URIhttp://example.com/index.html并且必须与任一被编码QUrl.toPercentEncoding()或QUrl.encodedPath( ) 。
如果IO设备to为0的readyRead( )信号被每个新的内容数据是可读取的时间发射。
如果IO设备to不为0时,响应的内容数据直接写入到设备。确保to指针是有效的操作的持续时间(它是安全的删除当requestFinished()信号被发射) 。
该函数不会阻塞,而是立即返回。该请求被预定,并且是异步执行的执行。该函数返回一个唯一的标识符,它是由通过requestStarted()和requestFinished( ) 。
当该请求被启动requestStarted()信号被发射。当它完成时的requestFinished()信号被发射。
See also setHost( )post( )head( )request( )requestStarted( )requestFinished()和done( ) 。
返回True如果有尚未被执行计划的任何请求,否则返回False 。
正在执行的请求not认为作为计划的要求。
See also clearPendingRequests( )currentId()和currentRequest( ) 。
发送一个请求头path通过设置服务器setHost()或在构造函数中指定。
path必须像一个绝对路径/index.html或者像一个绝对URIhttp://example.com/index.html。
该函数不会阻塞,而是立即返回。该请求被预定,并且是异步执行的执行。该函数返回一个唯一的标识符,它是由通过requestStarted()和requestFinished( ) 。
当该请求被启动requestStarted()信号被发射。当它完成时的requestFinished()信号被发射。
See also setHost( )get( )post( )request( )requestStarted( )requestFinished()和done( ) 。
这种方法也是一个Qt槽与C + +的签名void ignoreSslErrors()。
告诉QSslSocket用于HTTP连接忽略报告的错误sslErrors()信号。
注意,该功能必须从连接到一个时隙内的称为sslErrors()信号有任何影响。
See also QSslSocket和QSslSocket.sslErrors( ) 。
返回最近结束的HTTP请求接收到的响应报头。如果没有反应尚未收到QHttpResponseHeader.isValid( )将返回False 。
See also currentRequest( ) 。
对于发送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( ) 。
这是一个重载函数。
data作为HTTP请求的内容数据。
阅读maxlen从响应内容字节到data并返回读取的字节数。返回-1,如果发生了错误。
See also get( )post( )request( )readyRead( )bytesAvailable()和readAll( ) 。
读取响应内容的所有字节,并返回它们。
See also get( )post( )request( )readyRead( )bytesAvailable()和read( ) 。
发送一个请求到所设定的服务器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( ) 。
这是一个重载函数。
data作为HTTP请求的内容数据。
设置用于为请求的HTTP服务器hostName端口port。
该函数不会阻塞,而是立即返回。该请求被预定,并且是异步执行的执行。该函数返回一个唯一的标识符,它是由通过requestStarted()和requestFinished( ) 。
当该请求被启动requestStarted()信号被发射。当它完成时的requestFinished()信号被发射。
See also get( )post( )head( )request( )requestStarted( )requestFinished()和done( ) 。
设置用于为请求的HTTP服务器hostName端口port使用连接模式mode。
如果端口为0 ,它会使用默认端口mode使用( 80用于HTTP和HTTPS使用443 ) 。
该函数不会阻塞,而是立即返回。该请求被预定,并且是异步执行的执行。该函数返回一个唯一的标识符,它是由通过requestStarted()和requestFinished( ) 。
当该请求被启动requestStarted()信号被发射。当它完成时的requestFinished()信号被发射。
See also get( )post( )head( )request( )requestStarted( )requestFinished()和done( ) 。
启用HTTP代理支持,则使用代理服务器host端口port。username和password如果代理服务器需要身份验证可以提供。
例如:
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( ) 。
这是一个重载函数。
从使用的代理服务器设置启用HTTP代理支持proxy。如果proxy是一个透明代理,QHttp将调用QAbstractSocket.setProxy( )底层套接字上。如果类型是QNetworkProxy.HttpCachingProxy,QHttp会像以前的功能。
Note:对于使用Qt 4.3的兼容性,如果代理类型是QNetworkProxy.HttpProxy和请求类型是未加密的(也就是ConnectionModeHttp) ,QHttp将把代理的缓存代理。
取代了内部QTcpSocket那QHttp与使用socket。如果你想使用自己定制的,这非常有用QTcpSocket子类,而不是纯QTcpSocket那QHttp默认情况下使用。QHttp不采取插座的所有权,并不会删除socket销毁时。
该函数不会阻塞,而是立即返回。该请求被预定,并且是异步执行的执行。该函数返回一个唯一的标识符,它是由通过requestStarted()和requestFinished( ) 。
当该请求被启动requestStarted()信号被发射。当它完成时的requestFinished()信号被发射。
注意:如果QHttp用于运行其自己的事件循环的非GUI线程,你必须移动socket该线程调用setSocket ()之前。
See also QObject.moveToThread()和Thread Support in Qt。
这个函数设置的用户名userName和密码password对于需要身份验证的网页。
该函数不会阻塞,而是立即返回。该请求被预定,并且是异步执行的执行。该函数返回一个唯一的标识符,它是由通过requestStarted()和requestFinished( ) 。
当该请求被启动requestStarted()信号被发射。当它完成时的requestFinished()信号被发射。
返回该对象的当前状态。当状态改变时,stateChanged()信号被发射。
See also State和stateChanged( ) 。
这是该信号的默认超载。
这个信号可以在一个Web服务器发送给发射hostname和port需要验证。该authenticator对象可以被填充在与必需的细节,以便验证和持续的连接。
Note:这是不可能使用QueuedConnection连接到该信号,就好像所述认证没有被填充了新的信息时,该信号返回的连接失败。
此功能被引入Qt的4.3 。
See also QAuthenticator和QNetworkProxy。
这是该信号的默认超载。
当这个对象读取HTTP服务器的数据来表示的下载目前的进展,这个信号被发射。
done是数据的已经到来,而且量total是数据的总量。这是可能的,应该传输的数据的总量不能确定的,在这种情况total为0 (如果您连接到一个QProgressBar,进度条显示一个繁忙的指标,如果总为0 ) 。
Warning: done和total不一定以字节为单位的大小,因为对于大文件的这些值可能需要被“缩放”,以避免溢出。
See also dataSendProgress( )get( )post( )request()和QProgressBar。
这是该信号的默认超载。
当这个对象将数据发送到一个HTTP服务器通知它的上传进度这个信号被发射。
done是数据的已经到来,而且量total是数据的总量。这是可能的,应该传输的数据的总量不能确定的,在这种情况total为0 (如果您连接到一个QProgressBar,进度条显示一个繁忙的指标,如果总为0 ) 。
Warning: done和total不一定以字节为单位的大小,因为对于大文件的这些值可能需要被“缩放”,以避免溢出。
See also dataReadProgress( )post( )request()和QProgressBar。
这是该信号的默认超载。
这个信号被发射时的最后一个未决请求已经完成(这是后发出的最后一个请求的requestFinished( )信号) 。error是真的,如果在处理过程中发生错误,否则error是假的。
See also requestFinished( )error()和errorString( ) 。
这是该信号的默认超载。
这个信号可以被发射时,一proxy需要进行身份验证时使用。该authenticator对象可以被填充在与必需的细节,以便验证和持续的连接。
Note:这是不可能使用QueuedConnection连接到该信号,就好像所述认证没有被填充了新的信息时,该信号返回的连接失败。
此功能被引入Qt的4.3 。
See also QAuthenticator和QNetworkProxy。
这是该信号的默认超载。
当有新的响应数据来读取该信号被发射。
如果在其中的数据应该被写入请求中指定的一个装置,然后该信号是not射出,而是将数据直接写入到设备。
响应头中传递resp。
如果你想,只要它成为可用在处理大块数据这个信号是非常有用的。如果你只关心在完整的数据,只需连接到requestFinished( )信号并读取数据,然后代替。
See also get( )post( )request( )readAll( )read()和bytesAvailable( ) 。
这是该信号的默认超载。
处理所确定的请求时,这个信号被发射id已完成。error是真的,如果在处理过程中发生错误,否则error是假的。
See also requestStarted( )done( )error()和errorString( ) 。
这是该信号的默认超载。
处理所确定的请求时,这个信号被发射id开始。
See also requestFinished()和done( ) 。
这是该信号的默认超载。
当服务器响应的HTTP标头可用这个信号被发射。报头中传递resp。
See also get( )post( )head( )request()和readyRead( ) 。
这是该信号的默认超载。
转发sslErrors从信号QSslSocket在使用QHttp。errors是在SSL握手期间发生的错误的列表。除非你打电话ignoreSslErrors从连接到在发生错误时该信号的时隙内的() ,QHttp发射的信号后,立即将断开连接。
此功能被引入Qt的4.3 。
See also QSslSocket和QSslSocket.ignoreSslErrors( ) 。
这是该信号的默认超载。
这个信号被发射时的状态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 |