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

当第二人生登录时,它是通过 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协议是需要安全认证才允许登录服务器的。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

caimouse

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值