Code: DWORD dwProtocol; CString sServer; CString sObjectName; INTERNET_PORT wPort; AfxParseURL(sUploadServer, dwProtocol, sServer, sObjectName, wPort); CString sHeader = L"Content-Type: multipart/form-data; boundary=w23renff491nc4rth56u349"; CString sData = L"--w23renff491nc4rth56u349\r\nContent-Disposition: form-data; name=\"photo\"; filename=\""; sData.Append(sFileName); if(sFileExt == "jpg") { sData.Append(L"\"\r\nContent-Type: image/jpeg\r\nContent-Transfer-Encoding: binary\r\n\r\n"); } else if(sFileExt == "png") { sData.Append(L"\"\r\nContent-Type: image/png\r\nContent-Transfer-Encoding: binary\r\n\r\n"); } else if(sFileExt == "gif") { sData.Append(L"\"\r\nContent-Type: image/gif\r\nContent-Transfer-Encoding: binary\r\n\r\n"); } CString sBound = L"\r\n--w23renff491nc4rth56u349--\r\n"; HINTERNET hSession, hConnect, hRequest; DWORD dwFileSize, dwBytesRead, dwContentLength; char aBuff[1024]; char aBuff2[1024]; char aBuff3[1024]; hSession = InternetOpen(NULL, INTERNET_OPEN_TYPE_DIRECT, NULL, NULL, 0); if (hSession) { hConnect = InternetConnect(hSession, sServer, wPort, NULL, NULL, INTERNET_SERVICE_HTTP, 0, 0); if (hConnect) { hRequest = HttpOpenRequest(hConnect, L"POST", sObjectName, HTTP_VERSION, NULL, 0, INTERNET_FLAG_SECURE | INTERNET_FLAG_KEEP_CONNECTION, 0); if (hRequest) { HANDLE hFile = CreateFile(sPathName, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, NULL, NULL); if (hFile != INVALID_HANDLE_VALUE) { dwFileSize = GetFileSize(hFile, NULL); int nBytesCount = ::WideCharToMultiByte(CP_UTF8, 0, sHeader, sHeader.GetLength(), aBuff, 1024, 0, 0); aBuff[nBytesCount] = 0; nBytesCount = ::WideCharToMultiByte(CP_UTF8, 0, sData, sData.GetLength(), aBuff2, 1024, 0, 0); aBuff2[nBytesCount] = 0; nBytesCount = ::WideCharToMultiByte(CP_UTF8, 0, sBound, sBound.GetLength(), aBuff3, 1024, 0, 0); aBuff3[nBytesCount] = 0; dwContentLength = lstrlenA(aBuff2) + dwFileSize + lstrlenA(aBuff3); LPBYTE pBuf = (LPBYTE)malloc(dwContentLength); CopyMemory(&pBuf[0], aBuff2, lstrlenA(aBuff2)); ReadFile(hFile, &pBuf[lstrlenA(aBuff2)], dwFileSize, &dwBytesRead, NULL); CopyMemory(&pBuf[lstrlenA(aBuff2) + dwFileSize], aBuff3, lstrlenA(aBuff3)); HttpSendRequestA(hRequest, aBuff, lstrlenA(aBuff), pBuf, dwContentLength); CloseHandle(hFile); free(pBuf); DWORD dwAvailable, dwRead; char pOutBuf[2048]; char* pTempBuf = pOutBuf; while(InternetQueryDataAvailable(hRequest, &dwAvailable, 0, 0) && dwAvailable != 0) { DWORD dwRead; InternetReadFile(hRequest, pTempBuf, dwAvailable, &dwRead); pTempBuf += dwRead; } } } InternetCloseHandle(hRequest); } InternetCloseHandle(hConnect); } InternetCloseHandle(hSession); Доброго времени суток. Подскажите, пожалуйста, что не так. Загрузка фотографии в личное сообщение. В ответ - Security Breach2.
Кавычка после имени файла. В C# такой запрос проходит. Сдается мне, что сервера VK не работают с WinInet.
ВК не сможет определить, используете ли вы библиотеку WinInet или какую-то другую. Всё зависит от тела запроса, используйте Wireshark чтобы видеть, что там реально передаётся (если конечно не https).
В VK все запросы по https. Я думаю, что дело в реализации протокола https WinInet. В C# же запрос проходит... Даже если убрать из тела запроса фотографию, все равно возвращает Security Breach2, хотя должен вернуть ответ с пустым полем photo.
Написал в тех. поддержку вконтакте. Говорят, что WinInet высылает неверные заголовки. Интересно, что если отправить по http, тоже Security Breach2. Вот, что видно в Wireshark. Может найдется кто-то, кто скажет, что здесь не так? Code: Hypertext Transfer Protocol POST /c638418/upload.php?act=do_add&mid=194941606&aid=-3&gid=0&hash=b7818729913a4b849c88f9319eceeaa5&rhash=359a8b078fd7ea5da75a948fa3be0fe0&swfupload=1&api=1&mailphoto=1 HTTP/1.1\r\n Content-Type: multipart/form-data; boundary=w23renff491nc4rth56u349\r\n Host: pu.vk.com\r\n Content-Length: 105263\r\n Connection: Keep-Alive\r\n Cache-Control: no-cache\r\n \r\n [Full request URI: http://pu.vk.com/c638418/upload.php?act=do_add&mid=194941606&aid=-3&gid=0&hash=b7818729913a4b849c88f9319eceeaa5&rhash=359a8b078fd7ea5da75a948fa3be0fe0&swfupload=1&api=1&mailphoto=1] [HTTP request 2/2] File Data: 105263 bytes MIME Multipart Media Encapsulation, Type: multipart/form-data, Boundary: "w23renff491nc4rth56u349" [Type: multipart/form-data] First boundary: --w23renff491nc4rth56u349\r\n Encapsulated multipart part: (image/jpeg) Last boundary: \r\n--w23renff491nc4rth56u349--\r\n