如何使用C++;卷曲(libcurl) 我正在编写一个C++客户端,它使用libCURL与PHP脚本通信。
通信应该基于会话,因此第一个任务是登录并让PHP脚本设置会话 我不习惯使用C++或PHP来处理会话。我基本上知道这与cookies和通信会话id有关 我在curl主页上找不到任何演示简单会话管理用例的示例 我假设它与curl中的以下一个或多个选项有关:如何使用C++;卷曲(libcurl) 我正在编写一个C++客户端,它使用libCURL与PHP脚本通信。,php,c++,session,curl,libcurl,Php,C++,Session,Curl,Libcurl,通信应该基于会话,因此第一个任务是登录并让PHP脚本设置会话 我不习惯使用C++或PHP来处理会话。我基本上知道这与cookies和通信会话id有关 我在curl主页上找不到任何演示简单会话管理用例的示例 我假设它与curl中的以下一个或多个选项有关: CURLOPT_COOKIE CURLOPT_COOKIEFILE CURLOPT_COOKIEJAR CURLOPT_COOKIESESSION CURLOPT_COOKIELIST 但是我不能仅仅从CURLOPT_CookiesSessio
CURLOPT_COOKIE
CURLOPT_COOKIEFILE
CURLOPT_COOKIEJAR
CURLOPT_COOKIESESSION
CURLOPT_COOKIELIST
但是我不能仅仅从CURLOPT_CookiesSession的文档中看到全局
任何人谁做了这一点,请分享一个简单的代码,其中显示的概念
问候
RobertPHP中的会话的目的是在多个请求上保留一些状态,因为HTTP本身是无状态的。要从PHP获取会话,只需请求一个启动会话的PHP页面,并保留返回的cookie以供后续请求使用
在php中启动会话很简单-调用session_start()函数。如果请求中存在cookie,则该函数将恢复现有会话。会话启动时,可以使用超级全局数组$\会话设置持久变量。最好存储一个“is logged in”-token there=)来结束PHP会话,将$\u session设置为array(),以便销毁该令牌。我有一个bash中的命令行curl示例-登录到PHPMyAdmin,然后使用其导出函数。也许它会帮助你:
#!/bin/bash
PHPMYADMINURL="http://www.example.com/phpmyadmin/"
# Username and password, has to be URL-encoded
MYUSERNAME="username"
MYPASSWORD="password"
TMPCOOKIES="$(mktemp)" || exit 1
TOKEN=$(
curl \
--silent \
--show-error \
--data @- \
--data "lang=en-utf-8" \
--cookie-jar "$TMPCOOKIES" \
--dump-header - \
--url "$PHPMYADMINURL" \
<<< "pma_username=$MYUSERNAME&pma_password=$MYPASSWORD" \
| egrep 'token=[0-9a-h]+' \
| head -1 \
| sed -r 's/^(.*token=)([0-9a-h]+)(.*)/\2/' \
) || exit 1
curl \
--cookie "$TMPCOOKIES" \
--data "token=$TOKEN" \
--data "export_type=server" \
--data "what=sql" \
--data "asfile=sendit" \
--data "sql_data=something" \
--data "sql_columns=something" \
--data "sql_hex_for_blob=something" \
--data "compression=gzip" \
--url "$PHPMYADMINURL"export.php 1>&2 || exit 1
rm -f "$TMPCOOKIES" || exit 1
#/bin/bash
PHPMYADMINURL=”http://www.example.com/phpmyadmin/"
#用户名和密码,必须是URL编码
MYUSERNAME=“用户名”
MYPASSWORD=“password”
TMPCOOKIES=“$(mktemp)”| |退出1
代币=$(
卷曲\
--沉默的\
--显示错误\
--数据@-\
--数据“lang=en-utf-8”\
--饼干罐“$TMPCOOKIES”\
--卸料总管-\
--url“$PHPMYADMINURL”\
据我所知,如果启用cookie,CURL将自动为您处理会话cookie,只要您对会话中的每个请求重用CURL句柄:
CURL *Handle = curl_easy_init();
// Read cookies from a previous session, as stored in MyCookieFileName.
curl_easy_setopt( Handle, CURLOPT_COOKIEFILE, MyCookieFileName );
// Save cookies from *this* session in MyCookieFileName
curl_easy_setopt( Handle, CURLOPT_COOKIEJAR, MyCookieFileName );
curl_easy_setopt( Handle, CURLOPT_URL, MyLoginPageUrl );
assert( curl_easy_perform( Handle ) == CURLE_OK );
curl_easy_setopt( Handle, CURLOPT_URL, MyActionPageUrl );
assert( curl_easy_perform( Handle ) == CURLE_OK );
// The cookies are actually saved here.
curl_easy_cleanup( Handle );
我不确定您是否需要同时设置COOKIEFILE和COOKIEJAR,但文档中显示了这一点。在任何情况下,为了在CURL中启用Cookie,您必须设置其中一个。您可以执行以下简单操作:
curl_easy_setopt( Handle, CURLOPT_COOKIEFILE, "" );
它不会读取磁盘中的任何cookies,但它会在卷曲句柄期间启用会话cookie。
不幸的是,它似乎并没有使我知道需要知道的东西。谢谢您的输入。这确实是C++方面的解决方案,谢谢!我还设法研究了获得PHP会话的复杂话题。要发回的id cookie: