使用WinInet发送不一致的WebHook [英] Sending Discord Webhook using Wininet

查看:0
本文介绍了使用WinInet发送不一致的WebHook的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试将Web挂钩发送到以下URL:

https://discord.com/api/webhooks/781132765195747359/XDXDH08HsJ0GzkYFKvlDFO6QE3MtzKOqIaKpBruLmqLDJPvlLQEuQQNjr_R8x4y9zCjx

我的代码:

HINTERNET hIntSession = InternetOpenA((""), INTERNET_OPEN_TYPE_DIRECT, NULL, NULL, 0);

if (!hIntSession)
{
    return request_data;
}

HINTERNET hHttpSession = InternetConnectA(hIntSession, ("discord.com"), 80, 0, 0, INTERNET_SERVICE_HTTP, 0, NULL);

if (!hHttpSession)
{
    return request_data;
}

HINTERNET hHttpRequest = HttpOpenRequestA(hHttpSession, ("POST"), url.c_str()
    , 0, 0, 0, INTERNET_FLAG_RELOAD, 0);

if (!hHttpSession)
{
    return request_data;
}

char* szHeaders = ("Content-Type: application/json
User-Agent: License");
char* szRequest = ("{ "content": "test" }");

if (!HttpSendRequest(hHttpRequest, NULL, 0, szRequest, strlen(szRequest)))
{
    return request_data;
}

CHAR szBuffer[1024] = { 0 };
DWORD dwRead = 0;

while (InternetReadFile(hHttpRequest, szBuffer, sizeof(szBuffer) - 1, &dwRead) && dwRead)
{
    request_data.append(szBuffer, dwRead);
}

InternetCloseHandle(hHttpRequest);
InternetCloseHandle(hHttpSession);
InternetCloseHandle(hIntSession);

我还无法发布该请求,URL返回数据。

我正在努力让它向我的不和谐频道发送一个信息。它不起作用,我不确定原因。

推荐答案

上面来自Remy的评论提到缺少标题。这与其他一些小错误一起被修复了。您可以对照您所拥有的进行核对。

LPCTSTR szUserAgent = _T("Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.74 Safari/537.36 Edg/79.0.309.43");
LPCTSTR szHost = _T("discordapp.com");
LPCTSTR szUrlPath = _T("/api/webhooks/740632765195747359/m8FGH08HsJ0GzkYFKvlDFO6QE3MtzKOqIaKpZH4LmqLDJPvlLQEuQQNjr_R8x4y9zCjx");
LPCTSTR szAcceptTypes[] = { _T("application/json"), NULL };

LPCTSTR szContentTypeHeader = _T("Content-Type: application/json");
LPCSTR szPostData = "{ "username":"ANDY from StackOverflow", "content": "Test string again" }";
const DWORD dwPostDataLength = strlen(szPostData);

HINTERNET hIntSession = InternetOpen(szUserAgent, INTERNET_OPEN_TYPE_DIRECT, NULL, NULL, 0);
if (hIntSession) {
    HINTERNET hHttpSession = InternetConnect(hIntSession, szHost,
        INTERNET_DEFAULT_HTTPS_PORT, 0, 0, INTERNET_SERVICE_HTTP, 0, NULL);
    if (hHttpSession) {
        HINTERNET hHttpRequest = HttpOpenRequest(hHttpSession, _T("POST"), szUrlPath,
            NULL, NULL, szAcceptTypes,
            (INTERNET_FLAG_NO_COOKIES | INTERNET_FLAG_RELOAD | INTERNET_FLAG_SECURE |
                INTERNET_FLAG_PRAGMA_NOCACHE | INTERNET_FLAG_NO_CACHE_WRITE), 0);
        if (hHttpRequest) {
            if (HttpSendRequest(hHttpRequest,
                szContentTypeHeader, -1, (LPVOID)szPostData,
                dwPostDataLength)) {

                DWORD dwStatusCode = 0;
                {
                    TCHAR szStatusCode[32] = { 0 };
                    DWORD dwStatusCodeSize = sizeof(szStatusCode) / sizeof(TCHAR);
                    if (HttpQueryInfo(hHttpRequest, HTTP_QUERY_STATUS_CODE,
                        szStatusCode, &dwStatusCodeSize, NULL)) {
                        dwStatusCode = _ttoi(szStatusCode);
                    }
                }

                //
                // dwStatusCode: [200,299] means success, any other value
                // means something went wrong
                //

                unsigned char* lpResponse = NULL;
                DWORD dwTotalSize = 0;
                {
                    unsigned char* lpBuffer = (unsigned char*)malloc(2048);
                    DWORD dwRead = 0;
                    while (InternetReadFile(hHttpRequest, lpBuffer, sizeof(lpBuffer), &dwRead) && dwRead) {
                        unsigned char* lpTmp = (unsigned char*)realloc(lpResponse, dwTotalSize + dwRead);
                        if (lpTmp) {
                            lpResponse = lpTmp;
                            memcpy(&lpResponse[dwTotalSize], lpBuffer, dwRead);
                            dwTotalSize += dwRead;
                        }
                        dwRead = 0;
                    }
                    free(lpBuffer);
                }

                //
                // lpResponse now has your data with length of dwTotalSize.
                // Do with it what you want.
                // Keep in mind that a successful request will return
                // no data.
                //

                if (lpResponse) { free(lpResponse); }
            }
            InternetCloseHandle(hHttpRequest);
        }
        InternetCloseHandle(hHttpSession);
    }
    InternetCloseHandle(hIntSession);
}

这篇关于使用WinInet发送不一致的WebHook的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆