【问题标题】:C++ WebRequest ResponseC++ WebRequest 响应
【发布时间】:2015-10-03 16:32:46
【问题描述】:

我正在编写一个程序,该程序在 C++ 中创建一个指向 url 的 WebRequest。这是我的代码:

void CreateRequest()
{
    WSADATA wsaData;
    if (WSAStartup(MAKEWORD(2, 2), &wsaData) != 0) {
        return;
    }
    SOCKET Socket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
    struct hostent *host;
    host = gethostbyname("www.website.net");
    SOCKADDR_IN SockAddr;
    SockAddr.sin_port = htons(80);
    SockAddr.sin_family = AF_INET;
    SockAddr.sin_addr.s_addr = *((unsigned long*)host->h_addr);
    if (connect(Socket, (SOCKADDR*)(&SockAddr), sizeof(SockAddr)) != 0){
        return;
    }
    const char link[] = "www.website.net";

    char Link[100] = "";
    strcat(Link, "GET /File.php?Test=");
    strcat(Link, "test");
    strcat(Link, " HTTP/1.1\r\nHost: www.website.net \r\nConnection: close\r\n\r\n");


    send(Socket, Link, strlen(Link), 0);

    char buffer[10000];
    int nDataLength;
    while ((nDataLength = recv(Socket, buffer, 10000, 0)) > 0){
        int i = 0;
        while (buffer[i] >= 32 || buffer[i] == '\n' || buffer[i] == '\r') {
            cout << buffer[i];
            i += 1;
        }
    }
    closesocket(Socket);
    WSACleanup();
}

这是结果:

我想要做的只是得到“拒绝访问”,这样我就可以从我的代码中检查请求状态。

【问题讨论】:

    标签: c++ sockets http response webrequest


    【解决方案1】:
    strcat(Link, " HTTP/1.1\r\nHost: www.website.net \r\nConnection: close\r\n\r\n")
    

    您在主机名和\r\n 之间有一个额外的空格。尝试删除它,使其看起来像:

    strcat(Link, " HTTP/1.1\r\nHost: www.website.net\r\nConnection: close\r\n\r\n")
    

    编辑:

    也完全有可能 HTTP 级别的一切工作正常,但服务器上的 PHP 文件正在生成“拒绝访问”消息。你对 PHP 文件有控制权吗?

    【讨论】:

    • 代码工作正常,“拒绝访问”作为输出是正常的,但我只想要这个,没有“HTTP/\.\ 200 OK...”等等等等。所以当我执行请求我只想从“访问被拒绝”页面获得响应。
    • 然后您需要解析响应以获取响应正文(\r\n\r\n 之后的所有内容)。顺便说一句——这个回应有点假;它有Content-Type: text/html,但正文显然是纯文本。
    • 这就是问题所在,我从未使用过解析,也不知道该怎么做。
    • HTTP 协议看似复杂,但有许多微妙之处。最好找到一个现有的 C++ 库来构建请求和解析响应。
    • 我之前用过Curl库,但我不希望我的程序有额外的dll。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多