您的位置:首页 > 理论基础 > 计算机网络

第二人生的源码分析(六十四)类LLCurlEasyRequest实现Http请求

2008-05-16 21:06 555 查看
当第二人生登录时,它是通过HTTP请求来发送数据到服务器的,为了方便使用前面介绍的libcurl库,那么再提供一个HTTP特别请求类来实现这个功能。通过这个类LLCurlEasyRequest就可以与HTTP服务器进行交流数据了,具体声明代码如下:
#001 class LLCurlEasyRequest
#002 {
#003 public:

在构造函数里创建类Multi和类Easy。
#004 LLCurlEasyRequest();
#005 ~LLCurlEasyRequest();

设置URL的特别选项。
#006 void setopt(CURLoption option, S32 value);
#007 void setoptString(CURLoption option, const std::string& value);

设置HTTP协议POST数据。
#008 void setPost(char* postdata, S32 size);

设置头数据处理的回调函数。
#009 void setHeaderCallback(curl_header_callback callback, void* userdata);

设置从HTTP协议收到数据的回调函数。
#010 void setWriteCallback(curl_write_callback callback, void* userdata);

设置从HTTP协议发送数据出去的回调函数。
#011 void setReadCallback(curl_read_callback callback, void* userdata);
#012 void slist_append(const char* str);

发送URL请求字符串。
#013 void sendRequest(const std::string& url);

请求已经完成,删除分配的资源。
#014 void requestComplete();

调下面函数来收发数据。
#015 S32 perform();

调用这个函数不断地接收数据,直到数据接收完成为止。
#016 bool getResult(CURLcode* result, LLCurl::TransferInfo* info = NULL);
#017 std::string getErrorString();
#018
#019 private:
#020 CURLMsg* info_read(S32* queue, LLCurl::TransferInfo* info);
#021
#022 private:
#023 LLCurl::Multi* mMulti;
#024 LLCurl::Easy* mEasy;
#025 bool mRequestSent;
#026 bool mResultReturned;
#027 };

通过上面几个函数,就可以发出HTTP请求,并且可以收到HTTP服务器回来的数据,这样就可以把网页数据游览器显示出来。当然在发送请求之前,都是设置授权认证文件才可以通过的,它的实现是通过在函数LLAppViewer::mainLoop()里调用下面的语句:
LLCurl::setCAFile(gDirUtilp->getCAFile());
设置了授权证文件才允许登录到HTTP服务器。比如在我这里设置的授权文件名称是CA.pem,这个文件的内容如下:
-----BEGIN CERTIFICATE-----
MIIEuDCCA6CgAwIBAgIBBDANBgkqhkiG9w0BAQUFADCBtDELMAkGA1UEBhMCQlIx
EzARBgNVBAoTCklDUC1CcmFzaWwxPTA7BgNVBAsTNEluc3RpdHV0byBOYWNpb25h
bCBkZSBUZWNub2xvZ2lhIGRhIEluZm9ybWFjYW8gLSBJVEkxETAPBgNVBAcTCEJy
YXNpbGlhMQswCQYDVQQIEwJERjExMC8GA1UEAxMoQXV0b3JpZGFkZSBDZXJ0aWZp
Y2Fkb3JhIFJhaXogQnJhc2lsZWlyYTAeFw0wMTExMzAxMjU4MDBaFw0xMTExMzAy
MzU5MDBaMIG0MQswCQYDVQQGEwJCUjETMBEGA1UEChMKSUNQLUJyYXNpbDE9MDsG
A1UECxM0SW5zdGl0dXRvIE5hY2lvbmFsIGRlIFRlY25vbG9naWEgZGEgSW5mb3Jt
YWNhbyAtIElUSTERMA8GA1UEBxMIQnJhc2lsaWExCzAJBgNVBAgTAkRGMTEwLwYD
VQQDEyhBdXRvcmlkYWRlIENlcnRpZmljYWRvcmEgUmFpeiBCcmFzaWxlaXJhMIIB
IjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAwPMudwX/hvm+Uh2b/lQAcHVA
isamaLkWdkwP9/S/tOKIgRrL6Oy+ZIGlOUdd6uYtk9Ma/3pUpgcfNAj0vYm5gsyj
Qo9emsc+x6m4VWwk9iqMZSCK5EQkAq/Ut4n7KuLE1+gdftwdIgxfUsPt4CyNrY50
QV57KM2UT8x5rrmzEjr7TICGpSUAl2gVqe6xaii+bmYR1QrmWaBSAG59LrkrjrYt
bRhFboUDe1DK+6T8s5L6k8c8okpbHpa9veMztDVC9sPJ60MWXh6anVKo1UcLcbUR
yEeNvZneVRKAAU6ouwdjDvwlsaKydFKwed0ToQ47bmUKgcm+wV3eTRk36UOnTwID
AQABo4HSMIHPME4GA1UdIARHMEUwQwYFYEwBAQAwOjA4BggrBgEFBQcCARYsaHR0
cDovL2FjcmFpei5pY3BicmFzaWwuZ292LmJyL0RQQ2FjcmFpei5wZGYwPQYDVR0f
BDYwNDAyoDCgLoYsaHR0cDovL2FjcmFpei5pY3BicmFzaWwuZ292LmJyL0xDUmFj
cmFpei5jcmwwHQYDVR0OBBYEFIr68VeEERM1kEL6V0lUaQ2kxPA3MA8GA1UdEwEB
/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMA0GCSqGSIb3DQEBBQUAA4IBAQAZA5c1
U/hgIh6OcgLAfiJgFWpvmDZWqlV30/bHFpj8iBobJSm5uDpt7TirYh1Uxe3fQaGl
YjJe+9zd+izPRbBqXPVQA34EXcwk4qpWuf1hHriWfdrx8AcqSqr6CuQFwSr75Fos
SzlwDADa70mT7wZjAmQhnZx2xJ6wfWlT9VQfS//JYeIc7Fue2JNLd00UOSMMaiK/
t79enKNHEA2fupH3vEigf5Eh4bVAN5VohrTm6MY53x7XQZZr1ME7a55lFEnSeT0u
mlOAjR2mAbvSM5X5oSZNrmetdzyTj2flCM8CC7MLab0kkdngRIlUBGHF1/S5nmPb
K+9A46sd33oqK8n8
-----END CERTIFICATE-----
上面只是最前面的一段文件,后面还有很多段像上面的数据。可见第二人生的HTTP协议是需要安全认证才允许登录服务器的。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: