отправлять http запросы, поддерживать сессию: C / C ++ с cURL (камера Axus)

0

Я проблема, и я не могу понять, как я могу решить следующую проблему: я хотел бы отправить несколько запросов 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;
}

Все, что я хочу сделать в этом примере, заключается в том, чтобы сохранить сеанс после входа в IPaddress, а затем отправить заказ "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...

Я никогда не использовал этот метод раньше... Можете ли вы мне помочь?

Большое спасибо.

Теги:
curl
http
request
axis

1 ответ

1
Лучший ответ

Вам нужно добавить эти два варианта:

curl_easy_setopt(curl, CURLOPT_COOKIEFILE, "cookie.txt");
curl_easy_setopt(curl, CURLOPT_COOKIEJAR, "cookie.txt");

Из документации:

CURLOPT_COOKIEFILE

Передайте указатель на строку с нулевым завершением в качестве параметра. Он должен содержать имя вашего файла, содержащего данные cookie для чтения. Данные cookie могут быть в формате файлов cookie Netscape/Mozilla или просто в заголовках HTTP-стиля, сбрасываемых в файл.

Учитывая пустой или несуществующий файл или передавая пустую строку (""), этот параметр будет включать файлы cookie для этого ручка curl, что позволит понять и проанализировать полученные куки, а затем использовать соответствующие файлы cookie в будущих запросах.

Если вы используете эту опцию несколько раз, вы просто добавляете больше файлов для чтения. В последующих файлах будет добавлено больше файлов cookie.

CURLOPT_COOKIEJAR

Передайте имя файла как char *, ноль завершен. Это заставит libcurl записывать все внутренние файлы cookie в указанный файл при вызове curl_easy_cleanup (3). Если cookies не известны, файл не будет создан. Укажите "-", чтобы вместо этого файлы cookie были записаны в стандартный вывод. С помощью этой опции также разрешены файлы cookie для этого сеанса, поэтому, если вы, например, следуете за местоположением, он будет соответствующим образом получать соответствующие файлы cookie.

Если файл куки файла cookie не может быть создан или записан (когда вызывается curl_easy_cleanup (3)), libcurl не будет и не сможет сообщить об ошибке для этого. Используя CURLOPT_VERBOSE или CURLOPT_DEBUGFUNCTION, вы получите предупреждение для отображения, но это единственная видимая обратная связь, которую вы получите об этой, возможно, летальной ситуации

Читайте больше на: http://curl.haxx.se/libcurl/c/curl_easy_setopt.html

Ещё вопросы

Сообщество Overcoder
Наверх
Меню