将C POST请求转换为Curl

时间:2019-08-13 09:43:18

标签: html c curl post

我正在尝试将一些C代码转换为python。我需要了解原始C代码发出的POST请求的结构。我想将以下C代码转换为cURL命令:

void nonblock(int sock) {
    int flags = fcntl(sock, F_GETFL, 0);
    flags = flags | O_NONBLOCK;
    fcntl(sock, F_SETFL, flags);
}

int pool() {
        int sd = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP);

    nonblock(sd);

    struct sockaddr_in servaddr;

        memset(&servaddr, 0, sizeof(servaddr));

        servaddr.sin_family = AF_INET;
        servaddr.sin_port = htons(poolport);
    memcpy(&servaddr.sin_addr, poolip, sizeof(poolip));

    pollcount++;

        connect(sd, (struct sockaddr *)&servaddr, sizeof(servaddr));

    char buffer[1000];



    sprintf(buffer, "POST %s HTTP/1.1\r\ncontent-type: application/octet-stream\r\ncontent-length: %i\r\nhost: %s:%i\r\nconnection: close\r\n\r\n[\"mining_data\", \"%s\"]", 
        workPath,
        (19 + (int)strlen(address)),
        hostname,
        poolport,
        address
    );

    printf("1_____\n%s\n_____\n", 
    struct timeval tv;
    tv.tv_sec = 4;
    tv.tv_usec = 0;

    fd_set my;
    FD_ZERO(&my);
    FD_SET(sd, &my);
    select(sd+1, NULL, &my, NULL, &tv);

    if(!FD_ISSET(sd, &my)) {
        close(sd);
        usleep(500000);
        return -1;
    }

    send(sd, buffer, strlen(buffer), MSG_NOSIGNAL);

    tv.tv_sec = 4;
    tv.tv_usec = 0;

    FD_ZERO(&my);
    FD_SET(sd, &my);

    select(sd+1, &my, NULL, NULL, &tv);


    if(!FD_ISSET(sd, &my)) {
        close(sd);
        usleep(500000);
        return -1;
    }


    int bytes = read(sd, buffer, 1000);
        // I want what's in buffer here

        close(sd);
        ...
}

缓冲区是:

POST /work HTTP/1.1
content-type: application/octet-stream
content-length: 107
host: veopool.pw:8880
connection: close

["mining_data", "BONJmlU2FUqYgUY60LTIumsYrW/c6MHte64y5KlDzXk5toyEMaBzWm8dHmdMfJmXnqvbYmlwim0hiFmYCCn3Rm0="]

我尝试在cURL中请求与以下相同的数据

curl -v -d '{"mining_data":"BONJmlU2FUqYgUY60LTIumsYrW/c6MHte64y5KlDzXk5toyEMaBzWm8dHmdMfJmXnqvbYmlwim0hiFmYCCn3Rm0="}' -H "content-length: 107" -H "content-type: application/octet-stream" -H "connection: close" -X POST http://veopool.pw:8880/work

几秒钟后,我得到:

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Error</title>
</head>
<body>
<pre>Internal Server Error</pre>
</body>
</html>
* Closing connection 0

有人可以告诉我我在搞砸吗?

0 个答案:

没有答案