使用WinInet发送不一致的WebHook [英] Sending Discord Webhook using Wininet
本文介绍了使用WinInet发送不一致的WebHook的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我正在尝试将Web挂钩发送到以下URL:
我的代码:
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屋!
查看全文