发送http请求,保持会话活着:C / C ++与cURL(axus相机)

时间:2013-10-09 15:50:30

标签: c++ http curl request axis

我有一个问题,我无法想象我如何能够解决以下问题: 我想向轴摄像头发送多个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 ......

我之前从未真正使用过这种方法......你能帮我解决这个问题吗?

非常感谢你。

1 个答案:

答案 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会   得到一个警告显示,但这是你唯一可见的反馈   了解这种可能致命的情况

阅读详情:http://curl.haxx.se/libcurl/c/curl_easy_setopt.html