C ++ LibCurl发送HTTPS请求

时间:2010-11-21 21:57:03

标签: c++ sockets ssl curl libcurl

我有一个插件,我已经使用了很长一段时间,它基本上只使用套接字发送请求。问题是,当你在游戏服务器上使用插件时,你必须先在机器上登录SteamCommunity.com来存储cookie。我想将其转换为C ++,以通过首先使用HTTPS连接到该站点来缓解该步骤。自从我使用LibCurl已经有很长一段时间了,我没有太多运气找到我需要设置的信息。

基本上我只是想知道我是否采用正确的方法,以及我需要使用的其他CURLOPT_设置。

void InviteToGroup(const char *pszAuthID)
{
    CURL *curl;
    CURLcode res;

    const char *szCommunityID = GetCommunityID(pszAuthID); // User's Steam Community ID
    const char *szCookie = "76561198018111441%7C%7CC7D70E74A3F592F3E130CCF4CAACD4A7B9CAD993"; // Steam Community Login Cookie
    const char *szInviter = "76561194018311441"; // Inviter's Steam Community ID
    const char *szGroup = "103583791430784257"; // Group Steam Community ID

    const char *request = new char[2048];
    snprintf(request, 2047, "GET /actions/GroupInvite?type=groupInvite&inviter=%s&invitee=%s&group=%s HTTP/1.1\r\nHost: steamcommunity.com\r\nConnection: close\r\nCookie: steamLogin=%s\r\n\r\n", szInviter, szCommunityID, szGroup, szCookie);

    curl = curl_easy_init();
    if(curl)
    {
        curl_easy_setopt(curl, CURLOPT_URL, "https://www.steamcommunity.com");
        curl_easy_setopt(curl, CURLOPT_USERPWD, "myusername:mypass");

        // Attempt to Connect the Steam Community Server
        res = curl_easy_perform(curl);

        // Close the connection
        curl_easy_cleanup(curl);
    }
}

1 个答案:

答案 0 :(得分:0)

您似乎正在发送用户标头,可能需要CURLOPT_HTTPHEADER。您应该使用curl的slist来创建它。

如果你想用C ++而不是C语言编写,你应该学会正确使用字符串。因为它是你不能写入const char *,但是使用带有“希望它足够大”缓冲区大小的new并不是你在C ++中构造字符串的方式。您可能希望使用std :: ostringstream来创建类似于该字符串的字符串。