2011-06-11 65 views
1

我是新来的使用libcURL并有一个任务执行的问题。连续提交libcURL(C/C++)

我需要做一个两个连续提交更改文本框。

第一:网络有一个选择框(组)和一个提交按钮。

二:后德先提交您将获得带有

我的代码的特定页面,但不工作(这两个的提交):

#include <stdio.h> 
#include <iostream> 
#include <curl/curl.h> 
#include <curl/types.h> 
#include <curl/easy.h> 

int main(void) 
{ 
    CURL *curl; 
    CURLcode res; 

    struct curl_httppost *formpost = NULL; 
    struct curl_httppost *lastptr = NULL; 
    struct curl_slist *headerlist = NULL; 
    static const char buf[] = "Expect:"; 

    curl_global_init(CURL_GLOBAL_ALL); 

    curl_formadd(&formpost, &lastptr, CURLFORM_COPYNAME, "group", CURLFORM_COPYCONTENTS, "ImageSource", CURLFORM_END); 
    curl_formadd(&formpost, &lastptr, CURLFORM_COPYNAME, "submit", CURLFORM_COPYCONTENTS, "Select group", CURLFORM_END); 
    curl_formadd(&formpost, &lastptr, CURLFORM_COPYNAME, "root_ImageSource_I0_Name", CURLFORM_COPYCONTENTS, "weboCam", CURLFORM_END); 
    curl_formadd(&formpost, &lastptr, CURLFORM_COPYNAME, "submit", CURLFORM_COPYCONTENTS, "Save", CURLFORM_END); 

    curl = curl_easy_init(); 
    headerlist = curl_slist_append(headerlist, buf); 

    if(curl) 
    { 
     /* First set the URL that is about to receive our POST. This URL can 
     just as well be a https:// URL if that is what should receive the 
     data. */ 
     curl_easy_setopt(curl, CURLOPT_URL, "http://192.168.0.90/admin/config.shtml"); 
     curl_easy_setopt(curl, CURLOPT_USERPWD, "xxxx:xxxx"); 
     curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headerlist); 
     curl_easy_setopt(curl, CURLOPT_HTTPPOST, formpost); 

     res = curl_easy_perform(curl); 

     long http_code = 0; 

     curl_easy_getinfo (curl, CURLINFO_RESPONSE_CODE, &http_code); 

     if (http_code == 200 && res != CURLE_ABORTED_BY_CALLBACK) 
     { 
      cout << "Todo ha ido perfecto." << endl;   //Succeeded 
     } 
     else 
     { 
      cout << "Ha habido un error." << endl; //Failed 
     } 

     curl_formfree(formpost); 

     curl_easy_cleanup(curl); 
    } 

另一个问题:代码编译,并显示一切正常,但实际上只显示默认的页面代码提前http://192.168.0.90/admin/config.shtml

感谢

+0

我不明白。如果你想要两次提交,你的程序为什么只调用一次curl_easy_perform()? – 2011-06-11 22:20:28

+0

因为首先我想看看前两个curl_formadd的工作原理。在原始代码中,最后两个curl_formadd被注释。 – 2011-06-12 06:41:45

回答

1

第一步完成。

此代码完成第一步。

char *data1="group=ImageSource"; 
    char *data2="root_ImageSource_I0_Name=weboCam"; 

    curl = curl_easy_init(); 

    if(curl) 
    { 
     // Put the original page 
     curl_easy_setopt(curl, CURLOPT_URL, "http://192.168.0.90/admin/config.shtml"); 
     curl_easy_setopt(curl, CURLOPT_USERPWD, "root:root");  
     curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1); 
     curl_easy_setopt(curl, CURLOPT_POSTFIELDS, data1); 

选择第一个选择。 enter image description here

这样做后我想修改该文本框 enter image description here

总结一下:我想在一个页面的第二级来改变文本框。问题是在第二个easy_perform返回到顶级libcurl。