60 bool operator== (
const URL&)
const;
61 bool operator!= (
const URL&)
const;
72 String toString (
bool includeGetParameters)
const;
75 bool isEmpty()
const noexcept;
78 bool isWellFormed()
const;
96 String getSubPath (
bool includeGetParameters =
false)
const;
101 String getQueryString()
const;
106 String getAnchorString()
const;
116 bool isLocalFile()
const;
127 File getLocalFile()
const;
137 String getFileName()
const;
152 [[nodiscard]]
URL withNewDomainAndPath (
const String& newFullPath)
const;
161 [[nodiscard]]
URL withNewSubPath (
const String& newPath)
const;
167 URL getParentURL()
const;
181 URL getChildURL (
const String& subPath)
const;
194 [[nodiscard]]
URL withParameter (
const String& parameterName,
195 const String& parameterValue)
const;
207 [[nodiscard]]
URL withAnchor (
const String& anchor)
const;
220 [[nodiscard]]
URL withFileToUpload (
const String& parameterName,
221 const File& fileToUpload,
222 const String& mimeType)
const;
234 [[nodiscard]]
URL withDataToUpload (
const String& parameterName,
237 const String& mimeType)
const;
273 [[nodiscard]]
URL withPOSTData (
const String& postData)
const;
283 [[nodiscard]]
URL withPOSTData (
const MemoryBlock& postData)
const;
296 bool launchInDefaultBrowser()
const;
302 static bool isProbablyAWebsiteURL (
const String& possibleURL);
307 static bool isProbablyAnEmailAddress (
const String& possibleEmailAddress);
310 enum class ParameterHandling
346 [[nodiscard]]
InputStreamOptions withProgressCallback (std::function<
bool (
int bytesSent,
int totalBytes)> progressCallback)
const;
359 [[nodiscard]]
InputStreamOptions withConnectionTimeoutMs (
int connectionTimeoutMs)
const;
375 [[nodiscard]]
InputStreamOptions withNumRedirectsToFollow (
int numRedirectsToFollow)
const;
387 ParameterHandling getParameterHandling()
const noexcept {
return parameterHandling; }
388 std::function<bool (
int,
int)> getProgressCallback()
const noexcept {
return progressCallback; }
389 String getExtraHeaders()
const noexcept {
return extraHeaders; }
390 int getConnectionTimeoutMs()
const noexcept {
return connectionTimeOutMs; }
391 StringPairArray* getResponseHeaders()
const noexcept {
return responseHeaders; }
392 int* getStatusCode()
const noexcept {
return statusCode; }
393 int getNumRedirectsToFollow()
const noexcept {
return numRedirectsToFollow; }
394 String getHttpRequestCmd()
const noexcept {
return httpRequestCmd; }
398 const ParameterHandling parameterHandling;
400 std::function<bool (
int,
int)> progressCallback =
nullptr;
402 int connectionTimeOutMs = 0;
404 int* statusCode =
nullptr;
405 int numRedirectsToFollow = 5;
427 std::unique_ptr<InputStream> createInputStream (
const InputStreamOptions& options)
const;
434 std::unique_ptr<OutputStream> createOutputStream()
const;
453 virtual void progress (
DownloadTask* task, int64 bytesDownloaded, int64 totalLength);
465 bool usePost =
false;
468 [[nodiscard]]
auto withExtraHeaders (
String value)
const {
return with (&DownloadTaskOptions::extraHeaders, std::move (value)); }
483 [[nodiscard]]
auto withUsePost (
bool value)
const {
return with (&DownloadTaskOptions::usePost, value); }
486 template <
typename Member,
typename Value>
490 copy.*member = std::forward<Value> (value);
536 int64 contentLength = -1, downloaded = 0;
537 bool finished =
false, error =
false;
550 static void juce_iosURLSessionNotify (
const String&);
554 JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (
DownloadTask)
558 [[deprecated (
"Use the overload with a DownloadTaskOptions argument instead")]]
559 std::unique_ptr<DownloadTask> downloadToFile (
const File& targetLocation,
561 DownloadTaskListener* listener =
nullptr,
562 bool usePostCommand =
false);
591 bool readEntireBinaryStream (
MemoryBlock& destData,
592 bool usePostCommand =
false)
const;
609 String readEntireTextStream (
bool usePostCommand =
false)
const;
624 std::unique_ptr<XmlElement> readEntireXmlStream (
bool usePostCommand =
false)
const;
645 static String addEscapeChars (
const String& stringToAddEscapeCharsTo,
647 bool roundBracketsAreLegal =
true);
658 static String removeEscapeChars (
const String& stringToRemoveEscapeCharsFrom);
665 static URL createWithoutParsing (
const String& url);
669 using OpenStreamProgressCallback = bool (
void* context,
int bytesSent,
int totalBytes);
675 [[deprecated (
"New code should use the method which takes an InputStreamOptions argument instead.")]]
676 std::unique_ptr<InputStream> createInputStream (
bool doPostLikeRequest,
677 OpenStreamProgressCallback* progressCallback =
nullptr,
678 void* progressCallbackContext =
nullptr,
680 int connectionTimeOutMs = 0,
682 int* statusCode =
nullptr,
683 int numRedirectsToFollow = 5,
684 String httpRequestCmd = {})
const;
690 struct Bookmark :
public ReferenceCountedObject
692 using Ptr = ReferenceCountedObjectPtr<Bookmark>;
700 Bookmark::Ptr bookmark;
702 friend void setURLBookmark (URL&,
void*);
703 friend void* getURLBookmark (URL&);
707 struct Upload :
public ReferenceCountedObject
709 Upload (
const String&,
const String&,
const String&,
const File&, MemoryBlock*);
710 String parameterName, filename, mimeType;
712 std::unique_ptr<MemoryBlock> data;
714 JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (Upload)
718 friend class WebInputStream;
720 URL (
const String&,
int);
722 void addParameter (
const String&,
const String&);
723 bool hasBodyDataToSend()
const;
724 void createHeadersAndPostData (String&, MemoryBlock&,
bool)
const;
725 URL withUpload (Upload*)
const;
727 static ParameterHandling toHandling (
bool);
728 static File fileFromFileSchemeURL (
const URL&);
729 String getDomainInternal (
bool)
const;
733 MemoryBlock postData;
734 StringArray parameterNames, parameterValues;
737 ReferenceCountedArray<Upload> filesToUpload;
740 JUCE_LEAK_DETECTOR (URL)