Discord Webhooks 与 C++

问题描述 投票:0回答:1

因此,我接受了在 C++ 中进行 Webhooks 的挑战,并且我想获得一些有关发布请求的帮助。这是我目前的代码,我想通过 C++ 中的 post 请求发送嵌入。 这是我的代码以及错误和所有内容,如果您想自己测试一下,网络钩子仍然处于活动状态。我试图故意使用 Windows 库来保留这一切。

#include <winsock2.h>
#include <ws2tcpip.h>
#include <string>

#pragma warning(disable:4996) 
#pragma comment(lib, "ws2_32.lib")

using namespace std;

int Plug(string address, string port, SOCKET* csock) {
    WSADATA WSAData;
    WSAStartup(MAKEWORD(2, 0), &WSAData);

    PADDRINFOA result;
    ADDRINFOA hints;
    ZeroMemory(&hints, sizeof(ADDRINFO));
    hints.ai_family = AF_INET;
    hints.ai_socktype = SOCK_STREAM;
    hints.ai_protocol = IPPROTO_TCP;
    int res = getaddrinfo(address.c_str(), port.c_str(), &hints, &result);
    *csock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
    if (SOCKET_ERROR == connect(*csock, (SOCKADDR*)result->ai_addr, sizeof(SOCKADDR))) return WSAGetLastError();
    return 0;
}

void Unplug(SOCKET* csock) {
    closesocket(*csock);
    WSACleanup();
}


string PostRequest(string host, string query, string data) {
    string req = "POST " + query + " HTTP/1.1" + "\r\n";
    req += "Host: " + host + "\r\n";
    req += "Content-Type: application/x-www-form-urlencoded\r\n";
    req += "Content-Length: " + to_string(data.length()) + "\r\n";
    req += "Connection: Close";
    req += "\r\n\r\n" + data + "\r\n\r\n";
    SOCKET s;;
    Plug(host, "80", &s);
    Send(&s, req);
    while (GetAvailable(&s) == 0) Sleep(10);
    string result = Receive(&s);
    //if (result.find("\r\n\r\n") == string::npos && DEBUG) return result;
    //if (result.find("\r\n\r\n") == string::npos) return "PR_INVALID_RESPONSE";
    //result = result.substr(result.find("\r\n\r\n") + 4, string::npos);
    Unplug(&s);
    return result;
}
int main() {
    //https://discordapp.com/api/webhooks/705211476553629747/zwzqZMnTTgLtHBm3kc_DvvD71IW9FfE4ur-PQlkgeZhd56cT7UjSJCWI-V8wPiEUWV2w
    std::cout<<PostRequest("162.159.129.233","/api/webhooks/705249405141516360/s8ioXr6IZEeuPnMi1O37CmY3o5pUZcu6ho7aIJdieSAqgGyTXOZjkOZdMNe1uJre6dto","{'embeds': [{'description': '**ERROR**: `TESTSTRING`\n', 'color': 4508791}]}");
}

但是,当我发出帖子请求时,它无法发送我的内容,而是返回 400。我尝试了更多操作,但我想知道这是否是我的查询?

HTTP/1.1 301 Moved Permanently
Cache-Control: max-age=3600
Cf-Ray: 58bd304dec1ff2c0-WAW
Cf-Request-Id: 026a1c84ad0000f2c054113200000001
Date: Thu, 30 Apr 2020 00:36:28 GMT
Expires: Thu, 30 Apr 2020 01:36:28 GMT
Location: MYWEBHOOKURL
Server: cloudflare
Set-Cookie: __cfruid=5adc23f36cce3f0a398b8f9e91429b4349ef9314-1588206988; path=/; domain=.discordapp.com; HttpOnly
Vary: Accept-Encoding
Content-Length: 0
Connection: close

假设我使用不和谐的实际IP而不是解决它,我最终得到 代替这个

HTTP/1.1 403 Forbidden
Cache-Control: max-age=15
Cf-Ray: 58bd37782e6dffbc-WAW
Cf-Request-Id: 026a20ff1a0000ffbcc89df200000001
Content-Type: text/plain; charset=UTF-8
Date: Thu, 30 Apr 2020 00:41:21 GMT
Expires: Thu, 30 Apr 2020 00:41:36 GMT
Server: cloudflare
Set-Cookie: __cfduid=d4cb17401215362929759e2da8110f0e31588207281; expires=Sat, 30-May-20 00:41:21 GMT; path=/; domain=.162.159.129.233; HttpOnly; SameSite=Lax
Vary: Accept-Encoding
Content-Length: 16
Connection: close

error code: 1003

如果你有任何想法,请不要犹豫,把它们写在下面,我对此迷失了很长时间。

c++ windows post winsock cloudflare
1个回答
0
投票

您可以使用 D++ 发布到 webhooks:

https://dpp.dev/classdpp_1_1webhook.html

事实上,您可以使用此库做所有事情,而不是滚动自己的解决方案。

© www.soinside.com 2019 - 2024. All rights reserved.