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

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

Решение

Вам нужно добавить эти две опции:

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

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

CURLOPT_COOKIEFILE

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

Дан пустой или несуществующий файл или передана пустая строка
(«»), эта опция активирует куки для этой ручки скручивания, делая ее
понимать и анализировать полученные куки, а затем использовать соответствующие куки в
будущие запросы.

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

CURLOPT_COOKIEJAR

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

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

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

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]