遵循这个例子:
https://github.com/curl/curl/blob/master/docs/examples/smtp-tls.c
我设法通过设置密码来设置它:
curl_easy_setopt(curl, CURLOPT_PASSWORD, "password");
Run Code Online (Sandbox Code Playgroud)
但是,我想将密码设置为字符串,即:
string myPassword = "password";
curl_easy_setopt(curl, CURLOPT_PASSWORD, myPassword);
Run Code Online (Sandbox Code Playgroud)
但是,当我这样做时,我收到一个错误
curl_easy_perform() failed: Login denied
Run Code Online (Sandbox Code Playgroud)
我仔细检查并让程序在发送之前打印原始密码和字符串的值.它们完全一样.我有两个功能来测试它.它们几乎完全相同,只是一个使用硬编码密码而另一个使用字符串.硬编码的工作正常,但使用字符串的那个有登录问题.我怎么能解决这个问题?
该CURLOPT_PASSWORD选项需要a char*,而不是a std::string.你输错了类型.图书馆正在以"错误"的方式解释您的数据并获得无意义.
这不是诊断因为curl_easy_setopt使用varargs来获取不同类型的任意参数,具体取决于所设置的选项.(理想情况下,您的编译器会拒绝或至少警告该程序,但这是使用类型不安全的C库的成本!)
您可以使用std::string::c_str(),如下所示传递字符串的C字符串版本:
curl_easy_setopt(curl, CURLOPT_PASSWORD, myPassword.c_str());
Run Code Online (Sandbox Code Playgroud)
存在一个名为curlpp的项目,它声称是libcurl的类型安全包装器,这可能值得一看.
| 归档时间: |
|
| 查看次数: |
46 次 |
| 最近记录: |