我有一个问题,我无法想象我如何能够解决以下问题: 我想向轴摄像头发送多个http请求。 这是我的代码:
#include <stdio.h>
#include <curl/curl.h>
int main(void)
{
CURL *curl;
CURLcode res;
curl = curl_easy_init();
if(curl) {
curl_easy_setopt(curl, CURLOPT_URL, "http:/root:309@IPADDRESS");
/* example.com is redirected, so we tell libcurl to follow redirection */
// curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1L);
res=curl_easy_perform(curl);
curl_easy_setopt(curl, CURLOPT_URL, "http:/IPADDRESS/axis-cgi/com/ptz.cgi?move=left");
/* Perform the request, res will get the return code */
res = curl_easy_perform(curl);
/* Check for errors */
if(res != CURLE_OK)
fprintf(stderr, "curl_easy_perform() failed: %s\n",
curl_easy_strerror(res));
/* always cleanup */
curl_easy_cleanup(curl);
}
return 0;
}
我想在这个例子中做的就是在记录到IP地址后让我的会话保持活动状态,然后将命令“move = left”发送到这个非常ip的地址。 当我执行这个程序时,我收到了这些消息:
<HTML>
<HEAD>
<META HTTP-EQUIV="Expires" CONTENT="Tue, 01 Jan 1980 1:00:00 GMT">
<META HTTP-EQUIV="Pragma" CONTENT="no-cache">
<META HTTP-EQUIV="Cache-Control" CONTENT="no-cache">
<META HTTP-EQUIV="Refresh" CONTENT="0; URL=/view/index.shtml">
Your browser has JavaScript turned off.<br>For the user interface to work effectively, you must enable JavaScript in your browser and reload/refresh this page.
</noscript>
</HEAD>
<BODY>
</BODY>
</HTML>
<HTML><HEAD><TITLE>401 Unauthorized</TITLE></HEAD>
<BODY><H1>401 Unauthorized</H1>
Your client does not have permission to get URL /axis-cgi/com/ptz.cgi from this server.
</BODY></HTML>
我认为我甚至没有登录到ipaddress ......
我之前从未真正使用过这种方法......你能帮我解决这个问题吗?
非常感谢你。
答案 0 :(得分:1)
您需要添加以下两个选项:
curl_easy_setopt(curl, CURLOPT_COOKIEFILE, "cookie.txt");
curl_easy_setopt(curl, CURLOPT_COOKIEJAR, "cookie.txt");
来自文档:
<强> CURLOPT_COOKIEFILE 强>
将指向零终止字符串的指针作为参数传递。这应该 包含保存要读取的cookie数据的文件的名称。饼干 数据可能采用Netscape / Mozilla cookie数据格式,也可能只是常规数据 HTTP样式的标头转储到文件中。
给定一个空的或不存在的文件或传递空字符串 (&#34;&#34;),此选项将为此curl句柄启用Cookie 理解并解析收到的cookie,然后使用匹配的cookie 未来的要求。
如果您多次使用此选项,则只需添加更多文件即可 读。后续文件将添加更多cookie。
<强> CURLOPT_COOKIEJAR 强>
将文件名作为char *传递,零终止。这将使libcurl 将所有内部已知的cookie写入指定的文件时 curl_easy_cleanup(3)被调用。如果没有已知的cookie,则不会有文件 被创造。指定&#34; - &#34;而是将cookie写入stdout。 使用此选项还可以为此会话启用Cookie,因此如果您这样做 示例遵循一个位置,它将匹配cookie被发送 相应
如果不能创建或写入cookie jar文件(当时 curl_easy_cleanup(3)被调用),libcurl将不会也无法报告 这个错误。使用CURLOPT_VERBOSE或CURLOPT_DEBUGFUNCTION会 得到一个警告显示,但这是你唯一可见的反馈 了解这种可能致命的情况