Ben bir IIS7 sunucusunda bir php script POST veri ile bir WinHttp isteği yolluyorum, ve POST vücut sunucu tarafından alınan varlık değildir. Beklendiği gibi bir NULL vücut ile GET veya POST kullanarak WinHttp yoluyla gönderirseniz, ya da bir vücut ile POST kullanarak bir HTML formu ile, her şey çalışıyor.
İşte WinHttp POST ve bir beden olmadan çağrıları ile arasındaki farkı gösteren bazı basit kod:
Bir beden olmadan:
HINTERNET hSession = WinHttpOpen(L"WinHTTP/1.0", WINHTTP_ACCESS_TYPE_DEFAULT_PROXY, WINHTTP_NO_PROXY_NAME, WINHTTP_NO_PROXY_BYPASS, 0);//WINHTTP_FLAG_ASYNC);
HINTERNET mConnection = WinHttpConnect(hSession, L"127.0.0.1", 80, 0);
HINTERNET hRequest = WinHttpOpenRequest(mConnection, L"POST", L"/test.php", NULL, WINHTTP_NO_REFERER, WINHTTP_DEFAULT_ACCEPT_TYPES, 0);
void* bodyData = NULL;
DWORD bodyLength = 0;
bResult = WinHttpSendRequest(hRequest, WINHTTP_NO_ADDITIONAL_HEADERS, 0, bodyData, bodyLength, bodyLength, 0);
Bir vücut:
HINTERNET hSession = WinHttpOpen(L"WinHTTP/1.0", WINHTTP_ACCESS_TYPE_DEFAULT_PROXY, WINHTTP_NO_PROXY_NAME, WINHTTP_NO_PROXY_BYPASS, 0);//WINHTTP_FLAG_ASYNC);
HINTERNET mConnection = WinHttpConnect(hSession, L"127.0.0.1", 80, 0);
HINTERNET hRequest = WinHttpOpenRequest(mConnection, L"POST", L"/test.php", NULL, WINHTTP_NO_REFERER, WINHTTP_DEFAULT_ACCEPT_TYPES, 0);
char* pBodyStr = "a=1&b=2";
void* bodyData = (void*) pBodyStr;
DWORD bodyLength = strlen(pBodyStr);
bResult = WinHttpSendRequest(hRequest, L"content-type:application/x-www-form-urlencoded", -1, bodyData, bodyLength, bodyLength, 0);
Yani tek fark vücut parametreleri ve içerik türü başlığı vardır. Gerçekten garip bir şey bu 20 kat üzerinden 1 iş olabilir, ancak genellikle vücut sunucu tarafından alınan olmadığını ve bu zaman aşımına. Burada açıkça yanlış bir şey?