나는 하루 종일 노력했지만 아무런 운이 없으면 나는 만들었지 만 내가 할려고 할 때 winhttpsendrequest가 183 오류를 던지면 PHP는 이미지 파일을 업로드 할 수 없다.msdn 이미지 업로드 winhttp C++
int _tmain(int argc, _TCHAR* argv[]) {
HINTERNET hSession = NULL,
hConnect = NULL,
hRequest = NULL;
BOOL bResults = FALSE;
FILE *pFile;
long lSize;
char *buffer;
size_t result;
pFile = fopen("blog.jpg", "rb");
fseek(pFile, 0, SEEK_END);
lSize = ftell(pFile);
rewind(pFile);
buffer = (char *) malloc(sizeof(char) * lSize);
result = fread(buffer, 1, lSize, pFile);
fclose(pFile);
hSession = WinHttpOpen(L"WinHTTP Example/1.0",
WINHTTP_ACCESS_TYPE_DEFAULT_PROXY,
WINHTTP_NO_PROXY_NAME,
WINHTTP_NO_PROXY_BYPASS, 0);
if (hSession)
hConnect = WinHttpConnect(hSession, L"localhost",
INTERNET_DEFAULT_HTTP_PORT, 0);
if (hConnect)
hRequest = WinHttpOpenRequest(hConnect, L"POST", L"locker/upload.php",
NULL, WINHTTP_NO_REFERER,
WINHTTP_DEFAULT_ACCEPT_TYPES,
WINHTTP_FLAG_REFRESH);
static WCHAR frmdata[2048] = L"Connection: keep-alive\r\nContent-Type: multipart/form-data; -----------------------------7d82751e2bc0858\r\nContent-Disposition: form-data; name=\"file\"; filename=\"blog.jpg\"\r\nContent-Type: image/jpeg\r\n\r\n";
bResults = WinHttpSendRequest(hRequest,
frmdata, wcslen(frmdata), buffer,
lSize, wcslen(frmdata)+lSize, 0);
if (bResults) {
/*
DWORD dwBytesWritten = 0;
bResults = WinHttpWriteData(hRequest, buffer,
lSize,
&dwBytesWritten);
if (bResults) {
printf_s("Data: %d", dwBytesWritten);
}
*/
} else {
printf_s("SendReq: %d", GetLastError());
}
free(buffer);
if (hRequest) { WinHttpCloseHandle(hRequest); }
if (hConnect) { WinHttpCloseHandle(hConnect); }
if (hSession) { WinHttpCloseHandle(hSession); }
getchar();
return 0;
}
PHP 코드 :
if (isset($_FILES["file"])) {
$target_path = "uploads/";
$target_path = $target_path . basename($_FILES['file']['name']);
if(move_uploaded_file($_FILES['file']['tmp_name'], $target_path)) {
echo "The file ". basename($_FILES['file']['name']). " has been uploaded";
} else{
echo "There was an error uploading the file, please try again!";
}
}
비슷한 문제가 발생했습니다. 간헐적으로 오류 183으로 전송이 실패하고 간헐적으로 다시 실패 할 때까지 연결을 다시 작성하면 도움이됩니다. – ActiveTrayPrntrTagDataStrDrvr
winsock을 사용하고 헤더와 사용자를 올바르게 확인하십시오 \ r \ n 그리고 테두리를 설정할 때 여분의 간격을 두어야합니다. –
모두 검사했습니다. 동일한 호스트에 둘 이상의 연결이있을 때 발생하는 산발적 인 버그가있는 것 같습니다. HTTP 추적은 WinHttpSendRequest 비동기 완료시 ERROR_ALREADY_EXISTS를보고합니다. 다른 호스트와의 연결에서 발생하지 않는 것 같습니다. – ActiveTrayPrntrTagDataStrDrvr