MCPcopy Create free account
hub / github.com/78/tenbox / FetchString

Function FetchString

src/manager/http_download.cpp:89–179  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

87}
88
89DownloadResult FetchString(const std::string& url) {
90 DownloadResult result;
91
92 UrlParts parts;
93 if (!ParseUrl(url, parts)) {
94 result.error = "Invalid URL";
95 return result;
96 }
97
98 HINTERNET session = WinHttpOpen(L"TenBox/1.0",
99 WINHTTP_ACCESS_TYPE_DEFAULT_PROXY,
100 WINHTTP_NO_PROXY_NAME,
101 WINHTTP_NO_PROXY_BYPASS, 0);
102 if (!session) {
103 result.error = "Failed to open WinHTTP session";
104 return result;
105 }
106
107 DWORD timeout_ms = 30000;
108 WinHttpSetOption(session, WINHTTP_OPTION_CONNECT_TIMEOUT, &timeout_ms, sizeof(timeout_ms));
109 WinHttpSetOption(session, WINHTTP_OPTION_RECEIVE_TIMEOUT, &timeout_ms, sizeof(timeout_ms));
110 WinHttpSetOption(session, WINHTTP_OPTION_SEND_TIMEOUT, &timeout_ms, sizeof(timeout_ms));
111
112 HINTERNET connect = WinHttpConnect(session, parts.host.c_str(), parts.port, 0);
113 if (!connect) {
114 WinHttpCloseHandle(session);
115 result.error = "Failed to connect";
116 return result;
117 }
118
119 DWORD flags = parts.is_https ? WINHTTP_FLAG_SECURE : 0;
120 HINTERNET request = WinHttpOpenRequest(connect, L"GET", parts.path.c_str(),
121 nullptr, WINHTTP_NO_REFERER,
122 WINHTTP_DEFAULT_ACCEPT_TYPES, flags);
123 if (!request) {
124 WinHttpCloseHandle(connect);
125 WinHttpCloseHandle(session);
126 result.error = "Failed to open request";
127 return result;
128 }
129
130 if (!WinHttpSendRequest(request, WINHTTP_NO_ADDITIONAL_HEADERS, 0,
131 WINHTTP_NO_REQUEST_DATA, 0, 0, 0)) {
132 DWORD err = GetLastError();
133 WinHttpCloseHandle(request);
134 WinHttpCloseHandle(connect);
135 WinHttpCloseHandle(session);
136 result.error = "Failed to send request: " + FormatWinError(err);
137 return result;
138 }
139
140 if (!WinHttpReceiveResponse(request, nullptr)) {
141 DWORD err = GetLastError();
142 WinHttpCloseHandle(request);
143 WinHttpCloseHandle(connect);
144 WinHttpCloseHandle(session);
145 result.error = "Failed to receive response: " + FormatWinError(err);
146 return result;

Callers 1

FetchOnlineImagesFunction · 0.85

Calls 2

FormatWinErrorFunction · 0.85
ParseUrlFunction · 0.70

Tested by

no test coverage detected