2013-10-09 49 views
0

我有一個問題,我不能解決我怎麼能解決以下問題: 我想發送多個http請求到軸相機。 這裏是我的代碼:發送http請求,保持會話活着:C/C++與cURL(axus相機)

#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:[email protected]"); 
    /* 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地址後,再發送命令「移動=左」這個非常的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> 

我認爲我不是,甚至記錄到ip地址...

我從來沒有真正使用這種方法之前...你能幫助我呢?

非常感謝。

+0

看起來你必須使用' curl_multi_ *'函數,並啓用'CURLMOPT_PIPELINING'。你必須用'CURLM *'註冊你的'CURL *'。我在這裏找到了一個例子(http://darcs.net/release/src/hscurl.c)。 – jxh

回答

1

您需要添加這兩個選項:

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

從技術文檔:

CURLOPT_COOKIEFILE

傳遞一個指向零結尾的字符串作爲參數。它應該包含您的文件的名稱,其中包含要讀取的Cookie數據。數據可能採用Netscape/Mozilla的cookie數據格式,或者只是定期將 HTTP風格的標頭轉儲到文件中。

給出空的或不存在的文件,或通過將空字符串 (「」),此選項將啓動cookies此捲曲處理,使其 理解和分析收到的cookie,然後在 未來使用相匹配的餅乾要求。

如果您多次使用此選項,則只需將更多文件添加到 中即可。後續文件將添加更多Cookie。

CURLOPT_COOKIEJAR

傳遞一個文件名字符*,零終止。當調用 curl_easy_cleanup(3)時,這將使libcurl 將所有內部已知的cookie寫入指定的文件。如果不知道cookie,則不會創建 文件。指定「 - 」代替將cookie寫入標準輸出。 使用此選項也會啓用此會話的Cookie,因此如果您使用 示例,請遵循一個位置,使匹配的cookie相應地發送 。

如果無法創建或寫入(當 curl_easy_cleanup(3)被調用)該cookie jar文件,會的libcurl不會也不能對這個報告的 錯誤。使用CURLOPT_VERBOSE或CURLOPT_DEBUGFUNCTION將 得到一個警告顯示,但是這是唯一可見的反饋你 獲得有關此可能致命的情況

更多詳情:http://curl.haxx.se/libcurl/c/curl_easy_setopt.html