MCPcopy Create free account
hub / github.com/OSGeo/gdal / CPLHTTPFetchEx

Function CPLHTTPFetchEx

port/cpl_http.cpp:1272–1720  ·  view source on GitHub ↗

* Fetch a document from an url and return in a string. * @param pszURL Url to fetch document from web. * @param papszOptions Option list as a NULL-terminated array of strings. * Available keys see in CPLHTTPFetch. * @param pfnProgress Callback for reporting algorithm progress matching the * GDALProgressFunc() semantics. May be NULL. * @param pProgressArg Callback argument passed t

Source from the content-addressed store, hash-verified

1270 * CPLHTTPDestroyResult(), or NULL if libcurl support is disabled.
1271 */
1272CPLHTTPResult *CPLHTTPFetchEx(const char *pszURL, CSLConstList papszOptions,
1273 GDALProgressFunc pfnProgress, void *pProgressArg,
1274 CPLHTTPFetchWriteFunc pfnWrite, void *pWriteArg)
1275
1276{
1277 if (STARTS_WITH(pszURL, "/vsimem/") &&
1278 // Disabled by default for potential security issues.
1279 CPLTestBool(CPLGetConfigOption("CPL_CURL_ENABLE_VSIMEM", "FALSE")))
1280 {
1281 CPLString osURL(pszURL);
1282 const char *pszCustomRequest =
1283 CSLFetchNameValue(papszOptions, "CUSTOMREQUEST");
1284 if (pszCustomRequest != nullptr)
1285 {
1286 osURL += "&CUSTOMREQUEST=";
1287 osURL += pszCustomRequest;
1288 }
1289 const char *pszUserPwd = CSLFetchNameValue(papszOptions, "USERPWD");
1290 if (pszUserPwd != nullptr)
1291 {
1292 osURL += "&USERPWD=";
1293 osURL += pszUserPwd;
1294 }
1295 const char *pszPost = CSLFetchNameValue(papszOptions, "POSTFIELDS");
1296 if (pszPost != nullptr) // Hack: We append post content to filename.
1297 {
1298 osURL += "&POSTFIELDS=";
1299 osURL += pszPost;
1300 }
1301 const char *pszHeaders = CSLFetchNameValue(papszOptions, "HEADERS");
1302 if (pszHeaders != nullptr &&
1303 CPLTestBool(
1304 CPLGetConfigOption("CPL_CURL_VSIMEM_PRINT_HEADERS", "FALSE")))
1305 {
1306 osURL += "&HEADERS=";
1307 osURL += pszHeaders;
1308 }
1309 vsi_l_offset nLength = 0;
1310 CPLHTTPResult *psResult =
1311 static_cast<CPLHTTPResult *>(CPLCalloc(1, sizeof(CPLHTTPResult)));
1312 GByte *pabyData = VSIGetMemFileBuffer(osURL, &nLength, FALSE);
1313 if (pabyData == nullptr)
1314 {
1315 CPLDebug("HTTP", "Cannot find %s", osURL.c_str());
1316 psResult->nStatus = 1;
1317 psResult->pszErrBuf =
1318 CPLStrdup(CPLSPrintf("HTTP error code : %d", 404));
1319 CPLError(CE_Failure, CPLE_AppDefined, "%s", psResult->pszErrBuf);
1320 }
1321 else if (nLength != 0)
1322 {
1323 psResult->nDataLen = static_cast<int>(nLength);
1324 psResult->pabyData = static_cast<GByte *>(
1325 CPLMalloc(static_cast<size_t>(nLength) + 1));
1326 memcpy(psResult->pabyData, pabyData, static_cast<size_t>(nLength));
1327 psResult->pabyData[static_cast<size_t>(nLength)] = 0;
1328 }
1329

Callers 6

UploadFileFunction · 0.85
TEST_FFunction · 0.85
AuthV3Method · 0.85
LoadUrlMethod · 0.85
CPLHTTPFetchFunction · 0.85
GetCoverageMethod · 0.85

Calls 15

CPLTestBoolFunction · 0.85
CSLFetchNameValueFunction · 0.85
CPLCallocFunction · 0.85
VSIGetMemFileBufferFunction · 0.85
CPLDebugFunction · 0.85
CPLStrdupFunction · 0.85
CPLSPrintfFunction · 0.85
CPLErrorFunction · 0.85
CPLMallocFunction · 0.85
GetHTTPFetchContextFunction · 0.85
CPLHTTPDestroyResultFunction · 0.85
CPLHTTPEmitFetchDebugFunction · 0.85

Tested by 1

TEST_FFunction · 0.68