C++을 사용하여 파일의 내용을 온라인으로 가져올 수 있습니까?C++/WinAPI의 .NET WebClient.DownloadData (url) 대체?
0
A
답변
2
이렇게하는 방법에는 여러 가지가 있습니다.
WinInet을
우선 윈도우가 내장되어 API 사용하는 것이 합리적으로 간단 HTTP 요청을 만들 수 있도록.
Inet inet;
if (inet.Open(url))
{
BYTE buffer[UPDATE_BUFFER_SIZE];
DWORD dwRead;
while (inet.ReadFile(&buffer[0], UPDATE_BUFFER_SIZE, &dwRead))
{
// TODO: Do Something With buffer here
if (dwRead == 0)
{
break;
}
}
}
libcurl에
오히려 Windows 특정 API를 피하려는 경우 :
이/**
* Simple wrapper around the WinInet library.
*/
class Inet
{
public:
explicit Inet() : m_hInet(NULL), m_hConnection(NULL)
{
m_hInet = ::InternetOpen(
"My User Agent",
INTERNET_OPEN_TYPE_PRECONFIG,
NULL,
NULL,
/*INTERNET_FLAG_ASYNC*/0);
}
~Inet()
{
Close();
if (m_hInet)
{
::InternetCloseHandle(m_hInet);
m_hInet = NULL;
}
}
/**
* Attempt to open a URL for reading.
* @return false if we don't have a valid internet connection, the url is null, or we fail to open the url, true otherwise.
*/
bool Open(LPCTSTR url)
{
if (m_hInet == NULL)
{
return false;
}
if (url == NULL)
{
return false;
}
m_hConnection = ::InternetOpenUrl(
m_hInet,
url,
NULL /*headers*/,
0 /*headers length*/,
INTERNET_FLAG_NO_AUTH | INTERNET_FLAG_NO_CACHE_WRITE | INTERNET_FLAG_NO_COOKIES | INTERNET_FLAG_NO_UI,
reinterpret_cast<DWORD_PTR>(this));
return m_hConnection != NULL;
}
/**
* Read from a connection opened with Open.
* @return true if we read data.
*/
bool ReadFile(LPVOID lpBuffer, DWORD dwNumberOfBytesToRead, LPDWORD dwRead)
{
ASSERT(m_hConnection != NULL);
return ::InternetReadFile(m_hConnection, lpBuffer, dwNumberOfBytesToRead, dwRead) != 0;
}
/**
* Close any open connection.
*/
void Close()
{
if (m_hConnection != NULL)
{
::InternetCloseHandle(m_hConnection);
m_hConnection = NULL;
}
}
private:
HINTERNET m_hInet;
HINTERNET m_hConnection;
};
이의 사용법은 매우 간단하다 : 나는 그것을 사용하여 파일을 다운로드하려면이 간단한 래퍼 클래스를 사용 그러면 libcurl 라이브러리를 사용하여 HTTP를 비롯한 다양한 프로토콜을 사용하여 파일을 가져 오는 것보다 훨씬 어려울 수 있습니다. URL을 메모리로 직접 가져 오는 방법을 보여주는 좋은 예가 있습니다 (디스크로 다운로드하는 것을 피하십시오) : getinmemory sample.
0
다음 기능을 사용하십시오.
WinHttpConnect
WinHttpOpenRequest
WinHttpSendRequest
WinHttpReceiveResponse
WinHttpQueryDataAvailable
WinHttpReadData
관련 문제
- 1. 대체 URL
- 2. 대체 .NET 개발 도구
- 3. URL URL 배열 인코딩하기 .NET
- 4. NTFS 대체 데이터 스트림 - .NET
- 5. .NET Remoting이 WCF로 대체 되었습니까?
- 6. .net WebService URL 문제
- 7. URL ReWriter for .NET
- 8. IIS7 URL 재 작성 모듈 대체
- 9. Facebook Media Attachment - '음악'유형의 대체 URL?
- 10. 기존 URL에 대한 대체 URL 제공
- 11. .NET 웹 사이트의 URL 매핑
- 12. .NET MVC URL 라우팅 도움말
- 13. .NET 4에서 URL 재 작성?
- 14. URL 재 작성 .Net MVC
- 15. .net 웹 서비스 URL 보호
- 16. URL 재 작성 C# .net
- 17. .NET 용 대체 정규식 엔진, 재귀 지원
- 18. 정규식을 여러 단락 (.Net) 사이에 대체
- 19. 로컬라이제이션 .NET. ResourceManager를 사용할 때의 대체 언어
- 20. WebClient.DownloadData()가 완료되는 데 걸리는 시간을 감지하는 방법?
- 21. CAPICOM 대체
- 22. ServerXMLHTTP30 대체
- 23. PHP URL GET 매개 변수가있는 경우 대체 하시겠습니까?
- 24. C# 크로스 플랫폼 RichTextBox URL 또는 대체 솔루션
- 25. .Net framework 4 SDK 다운로드 URL?
- 26. .NET : C#으로 HTTP 트래픽 URL 나열
- 27. CrystalReportGridViewer 대체
- 28. 대체
- 29. 대체
- 30. JQuery와 URL
대단히 감사합니다! – Alex