使用 libcURL (C/C++) 连续提交

标签 c curl submit form-submit libcurl

我是 libcURL 的新手,在执行任务时遇到问题。

我需要连续提交两次来更改文本框。

首先:Web 有一个选择框(组)和一个提交按钮。

第二:在第一次提交后,您将获得一个特定的页面

我的代码,但不起作用(都提交):

#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

提前致谢

最佳答案

第一步完成。

此代码执行第一步。

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

总结:我想在页面的第二层更改一个文本框。问题是 libcurl 在第二次 easy_perform 返回顶层时出现。

关于使用 libcURL (C/C++) 连续提交,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6318041/

相关文章:

python - 如何访问该模型类中的数据?

c++ - malloc内存检查是否连续

linux - 如何使用可重定向反编译器 cURL API?

curl - docker中的Nginx如何禁用HTTP重定向到https

对 gcc -static 选项或其在虚拟机中的行为感到困惑

c - C 和 .h 文件中的结构

javascript - 读取范围 block 用 php 分块

jquery - 提交表单并将提交按钮替换为进度指示器

javascript - 表单提交到 _blank 后如何刷新表单页面?

javascript - 使用 Javascript 提交表单