2010-09-24 19 views
5

मैं आईआईएस 7 सर्वर पर एक PHP स्क्रिप्ट पर POST डेटा के साथ WinHttp अनुरोध भेज रहा हूं, और POST बॉडी सर्वर द्वारा प्राप्त नहीं किया जा रहा है। यदि मैं जीईटी का उपयोग करके WinHttp के माध्यम से भेजता हूं, या एक पूर्ण शरीर के साथ POST, या एक शरीर के साथ POST का उपयोग कर एक HTML फॉर्म के माध्यम से भेजता हूं, तो सब कुछ अपेक्षित काम करता है।WinHttp POST body

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); 
एक शरीर के साथ

:

एक शरीर के बिना:

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); 

तो

यहाँ कुछ सरल द्वारा WinHTTP पोस्ट के साथ और एक शरीर के बिना कॉल के बीच का अंतर दिखा कोड है केवल अंतर पैरामीटर पैरामीटर, और सामग्री-प्रकार हेडर हैं। वास्तव में अजीब चीज यह है कि यह 20 बार में से 1 काम कर सकता है, लेकिन आमतौर पर शरीर को सर्वर द्वारा प्राप्त नहीं किया जाता है और यह समय समाप्त हो जाता है। यहां कुछ भी गलत है?

उत्तर

2

किसी और को, जो अभी भी यह समस्या है के लिए, PUT बजाय पोस्ट उपयोग करके देखें।

मेरे मामले में, WinHttp क्लाइंट वीएफपी में था, लेकिन परिणाम समान थे। ब्राउज़र के माध्यम से भेजे गए एक पोस्ट ने ठीक काम किया, लेकिन जब मैंने WinHttp ऑब्जेक्ट से भेजा, तो अनुरोध निकाय खाली दिखाई दिया।

PUT, हालांकि, सामान्य रूप से फिर से काम किया ... सिवाय इसके कि

// Simply using 
// 
// file_get_contents('php://input') 
//  
// does not work with the request sent by WinHttp.WinHttpRequest. 
$fp = fopen('php://input', 'rb'); 
stream_filter_append($fp, 'dechunk', STREAM_FILTER_READ); 
$report_contents = stream_get_contents($fp); 

, इस ब्राउज़र आधारित अनुरोधों में कोई मुद्दा नहीं था।

इसके अलावा, POST ने एएसपी.NET क्लाइंट के लिए बस ठीक काम किया। यह केवल PHP/Linux पृष्ठ पर पढ़ने की कोशिश करते समय आया था।