Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/294.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用C++;卷曲(libcurl) 我正在编写一个C++客户端,它使用libCURL与PHP脚本通信。_Php_C++_Session_Curl_Libcurl - Fatal编程技术网

如何使用C++;卷曲(libcurl) 我正在编写一个C++客户端,它使用libCURL与PHP脚本通信。

如何使用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

通信应该基于会话,因此第一个任务是登录并让PHP脚本设置会话

我不习惯使用C++或PHP来处理会话。我基本上知道这与cookies和通信会话id有关

我在curl主页上找不到任何演示简单会话管理用例的示例

我假设它与curl中的以下一个或多个选项有关:

CURLOPT_COOKIE
CURLOPT_COOKIEFILE
CURLOPT_COOKIEJAR
CURLOPT_COOKIESESSION
CURLOPT_COOKIELIST
但是我不能仅仅从CURLOPT_CookiesSession的文档中看到全局

任何人谁做了这一点,请分享一个简单的代码,其中显示的概念

问候


Robert

PHP中的会话的目的是在多个请求上保留一些状态,因为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: