[英]how to use CURL to login site
我对cURL非常陌生,因此希望可以得到一些帮助。 当前,我在Windows环境中,并且使用Visual Studio。
我正在尝试使用cURL通过DLink网站( https://mydlink.com/login )访问DLink IP摄像机。 并通过IP摄像机抓取视频流进行一些处理。 但是要做到这一点,我必须先登录。 但是我不确定该怎么做。 下面是我的代码。
int main()
{
CURL *curl;
CURLcode result;
char *url_1 = "https://mydlink.com/login";
char *postdata = "email=xyz@gmail.com&password=123456";
char *cookiefile = "tempcookie";
curl = curl_easy_init();
if( curl )
{
curl_easy_setopt(curl, CURLOPT_COOKIEFILE, cookiefile);
curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1);
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, dummy);
curl_easy_setopt(curl, CURLOPT_URL, url_1);
curl_easy_setopt(curl, CURLOPT_POSTFIELDS, postdata);
// Connect to target (login)
result = curl_easy_perform(curl);
if( result )
cout << "Cannot connect to site, check your url!\n";
else
{
//...
}
}
return 0;
}
有人可以启发我,或者提供一些代码吗? 谢谢
1)您的示例代码不完整:您使用的虚拟函数不在列表中。 虚拟函数返回size * nmemb(请参见CURLOPT_WRITEFUNCTION的手册)非常重要,因此很难说出问题所在。
2)您不会输出错误代码:请使用curl_easy_strerror解码结果中的错误,然后您就会知道为什么失败。
3)如果我提供了自己的“虚拟”回调,那么我将获得一个没有错误的HTML页面,并且页面本身不会抱怨密码错误或任何错误(这很奇怪,但确实可行)。
这是我的假人:
size_t dummy(char *ptr, size_t size, size_t nmemb, void *userdata)
{
printf("%.*s", size*nmemb, ptr);
return size*nmemb;
}
我进一步看了一下mydlink.com在做什么,它正在用电子邮件地址进行杂技表演(例如确定它是否是本地的,试图猜测一个区域等),然后操作cookie -都是在javascript中,因此我害怕有人必须挖掘该Javascript才能模拟正确的登录POST,或者可能找到有关mydlink.com服务的适当文档,对不起。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.