CURLOPT_URL.3 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119
  1. .\" generated by cd2nroff 0.1 from CURLOPT_URL.md
  2. .TH CURLOPT_URL 3 "2025-01-17" libcurl
  3. .SH NAME
  4. CURLOPT_URL \- URL for this transfer
  5. .SH SYNOPSIS
  6. .nf
  7. #include <curl/curl.h>
  8. CURLcode curl_easy_setopt(CURL *handle, CURLOPT_URL, char *URL);
  9. .fi
  10. .SH DESCRIPTION
  11. Pass in a pointer to the \fIURL\fP to work with. The parameter should be a
  12. char * to a null\-terminated string which must be URL\-encoded in the following
  13. format:
  14. scheme://host:port/path
  15. For a greater explanation of the format please see RFC 3986.
  16. libcurl does not validate the syntax or use the URL until the transfer is
  17. started. Even if you set a crazy value here, \fIcurl_easy_setopt(3)\fP might
  18. still return \fICURLE_OK\fP.
  19. If the given URL is missing a scheme name (such as "http://" or "ftp://" etc)
  20. then libcurl guesses based on the host. If the outermost subdomain name
  21. matches DICT, FTP, IMAP, LDAP, POP3 or SMTP then that protocol gets used,
  22. otherwise HTTP is used. Since 7.45.0 guessing can be disabled by setting a
  23. default protocol, see \fICURLOPT_DEFAULT_PROTOCOL(3)\fP for details.
  24. Should the protocol, either as specified by the URL scheme or deduced by
  25. libcurl from the hostname, not be supported by libcurl then
  26. \fICURLE_UNSUPPORTED_PROTOCOL\fP is returned from either the \fIcurl_easy_perform(3)\fP
  27. or \fIcurl_multi_perform(3)\fP functions when you call them. Use
  28. \fIcurl_version_info(3)\fP for detailed information of which protocols are supported
  29. by the build of libcurl you are using.
  30. \fICURLOPT_PROTOCOLS_STR(3)\fP can be used to limit what protocols libcurl may
  31. use for this transfer, independent of what libcurl has been compiled to
  32. support. That may be useful if you accept the URL from an external source and
  33. want to limit the accessibility.
  34. The \fICURLOPT_URL(3)\fP string is ignored if \fICURLOPT_CURLU(3)\fP is set.
  35. Either \fICURLOPT_URL(3)\fP or \fICURLOPT_CURLU(3)\fP must be set before a
  36. transfer is started.
  37. The application does not have to keep the string around after setting this
  38. option.
  39. The parser used for handling the URL set with \fICURLOPT_URL(3)\fP is the same
  40. that \fIcurl_url_set(3)\fP uses.
  41. .SH ENCODING
  42. The string pointed to in the \fICURLOPT_URL(3)\fP argument is generally
  43. expected to be a sequence of characters using an ASCII compatible encoding.
  44. If libcurl is built with IDN support, the server name part of the URL can use
  45. an "international name" by using the current encoding (according to locale) or
  46. UTF\-8 (when winidn is used; or a Windows Unicode build using libidn2).
  47. If libcurl is built without IDN support, the server name is used exactly as
  48. specified when passed to the name resolver functions.
  49. .SH DEFAULT
  50. NULL. If this option is not set, no transfer can be performed.
  51. .SH SECURITY CONCERNS
  52. Applications may at times find it convenient to allow users to specify URLs
  53. for various purposes and that string would then end up fed to this option.
  54. Getting a URL from an external untrusted party brings several security
  55. concerns:
  56. If you have an application that runs as or in a server application, getting an
  57. unfiltered URL can easily trick your application to access a local resource
  58. instead of a remote. Protecting yourself against localhost accesses is hard
  59. when accepting user provided URLs.
  60. Such custom URLs can also access other ports than you planned as port numbers
  61. are part of the regular URL format. The combination of a local host and a
  62. custom port number can allow external users to play tricks with your local
  63. services.
  64. Accepting external URLs may also use other protocols than http:// or other
  65. common ones. Restrict what accept with \fICURLOPT_PROTOCOLS_STR(3)\fP.
  66. User provided URLs can also be made to point to sites that redirect further on
  67. (possibly to other protocols too). Consider your
  68. \fICURLOPT_FOLLOWLOCATION(3)\fP and \fICURLOPT_REDIR_PROTOCOLS_STR(3)\fP settings.
  69. .SH PROTOCOLS
  70. This functionality affects all supported protocols
  71. .SH EXAMPLE
  72. .nf
  73. int main(void)
  74. {
  75. CURL *curl = curl_easy_init();
  76. if(curl) {
  77. curl_easy_setopt(curl, CURLOPT_URL, "https://example.com");
  78. curl_easy_perform(curl);
  79. }
  80. }
  81. .fi
  82. .SH AVAILABILITY
  83. Added in curl 7.1
  84. .SH RETURN VALUE
  85. Returns CURLE_OK on success or CURLE_OUT_OF_MEMORY if there was insufficient
  86. heap space.
  87. Note that \fIcurl_easy_setopt(3)\fP does not parse the given string so given a
  88. bad URL, it is not detected until \fIcurl_easy_perform(3)\fP or similar is
  89. called.
  90. .SH SEE ALSO
  91. .BR CURLINFO_REDIRECT_URL (3),
  92. .BR CURLOPT_CURLU (3),
  93. .BR CURLOPT_FORBID_REUSE (3),
  94. .BR CURLOPT_FRESH_CONNECT (3),
  95. .BR CURLOPT_PATH_AS_IS (3),
  96. .BR CURLOPT_PROTOCOLS_STR (3),
  97. .BR curl_easy_perform (3),
  98. .BR curl_url_get (3),
  99. .BR curl_url_set (3)