16 | 17 |
- Declared In:
14 |- CURLHandle.h
15 |
45 | 46 | 47 |54 | 55 | 56 | 57 | 58 | 59 | 60 |48 | 49 |
52 | 53 |- - parsedCookies
50 | 51 |
66 | - (NSDictionary *)parsedCookies
67 |
68 | Parse the array of cookie lines, turning it into a dictionary of key/values 69 | (suitable for passing to setRequestCookies:).
70 | 71 | For instance, this will turn
72 | 73 | ( "B=96lr6csucjt99&b=2; expires=Thu, 15 Apr 2010 20:00:00 GMT; path=/; domain=.yahoo.com"; )
74 | 75 | into
76 | 77 | { 78 | B = { 79 | value = "96lr6csucjt99&b=2"; 80 | expires = "Thu, 15 Apr 2010 20:00:00 GMT"; 81 | path = "/"; 82 | domain = ".yahoo.com"; 83 | } 84 | } 85 | 86 | 87 | 88 | 89 | 90 |
91 | 92 | -------------------------------------------------------------------------------- /Documentation/NSDictionary+CurlHTTPExtensions.html: -------------------------------------------------------------------------------- 1 |
16 | 17 |
- Declared In:
14 |- CURLHandle.h
15 |
45 | 46 | 47 |58 | 59 | 60 | 61 | 62 | 63 | 64 |48 | 49 |
56 | 57 |- - formatForHTTP
50 | 51 |- - formatForHTTPUsingEncoding:
52 | 53 |- - formatForHTTPUsingEncoding:ordering:
54 | 55 |
70 | - (NSString *)formatForHTTP
71 |
72 | Convert a dictionary to an HTTP-formatted string with 7-bit ASCII encoding; 73 | see formatForHTTPUsingEncoding. 74 | 75 |
77 | - (NSString *)formatForHTTPUsingEncoding:(NSStringEncoding)inEncoding
78 |
79 |
80 | Convert a dictionary to an HTTP-formatted string with the given encoding.
81 | Spaces are turned into +
; other special characters are escaped with %
;
82 | keys and values are output as key=value; in between arguments is &
.
83 |
84 |
86 | - (NSString *)formatForHTTPUsingEncoding:(NSStringEncoding)inEncoding ordering:(NSArray *)inOrdering
87 |
88 |
89 | Convert a dictionary to an HTTP-formatted string with the given encoding, as above. The inOrdering parameter specifies the order to place the inputs, for servers that care about this. (Note that keys in the dictionary that aren't in inOrdering will not be included.) If inOrdering is nil, all keys and values will be output in an unspecified order. 90 | 91 | 92 | 93 | 94 | 95 |
96 | 97 | -------------------------------------------------------------------------------- /Documentation/NSString+CurlHTTPExtensions.html: -------------------------------------------------------------------------------- 1 |
16 | 17 |
- Declared In:
14 |- CURLHandle.h
15 |
45 | 46 | 47 |68 | 69 | 70 | 71 | 72 | 73 | 74 |48 | 49 |
66 | 67 |- - headerStatus
50 | 51 |- - headerHTTPVersion
52 | 53 |- - headerMatchingKey:
54 | 55 |- - headersMatchingKey:
56 | 57 |- - allHTTPHeaderDicts
58 | 59 |- - headerKey
60 | 61 |- - headerValue
62 | 63 |- - componentsSeparatedByLineSeparators
64 | 65 |
80 | - (NSArray *)allHTTPHeaderDicts
81 |
82 | No method description. 83 | 84 |
86 | - (NSArray *)componentsSeparatedByLineSeparators
87 |
88 | No method description. 89 | 90 |
92 | - (NSString *)headerHTTPVersion
93 |
94 | No method description. 95 | 96 |
98 | - (NSString *)headerKey
99 |
100 | No method description. 101 | 102 |
104 | - (NSString *)headerMatchingKey:(NSString *)inKey
105 |
106 |
107 | No method description. 108 | 109 |
111 | - (NSString *)headerStatus
112 |
113 | No method description. 114 | 115 |
117 | - (NSString *)headerValue
118 |
119 | No method description. 120 | 121 |
123 | - (NSArray *)headersMatchingKey:(NSString *)inKey
124 |
125 |
126 | No method description. 127 | 128 | 129 | 130 | 131 | 132 |
133 | 134 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | CURLHandle is a high level Objective-C interface to the libcurl library. 2 | 3 | It was originally created by Dan Wood of [Karelia Software](http://karelia.com), way back in the mists of time, when dinosaurs still roamed the earth (ok, sometime around 2001). 4 | 5 | It is now mostly maintained by [Mike Abdullah](http://twitter.com/mikeabdullah) (also of Karelia), with guest appearances by [Sam Deane](http://bornsleepy.com/sam) of [Elegant Chaos](http://elegantchaos.com). 6 | 7 | ## Documentation 8 | 9 | This documentation is under development. 10 | 11 | Eventually, full documentation will be found on the [github pages](http://karelia.github.io/CurlHandle/Documentation). 12 | 13 | ## License 14 | 15 | Blah. 16 | 17 | ## Manifest 18 | 19 | This package contains the following top-level items: 20 | 21 | - CURLHandleSource -- folder containing project that makes CURLHandle.framework. 22 | - CURLHandleTesterSource -- folder containing project that makes CURLHandleTester.app; a useful "template" for making sure your own projects properly include CURLHandle framework. 23 | - curl -- git submodule containing the libcurl source 24 | - c-ares -- git submodule containing the libcares source 25 | - SFTP -- git submodule containing libssh2 and associated support files 26 | - Scripts -- miscellaneous scripts 27 | - Documentation -- source files for the [documentation](http://karelia.github.io/CurlHandle/Documentation), including the [release notes](http://karelia.github.io/CurlHandle/Documentation/docs/Documentation/Release%20Notes.html) 28 | -------------------------------------------------------------------------------- /Scripts/build-libs.sh: -------------------------------------------------------------------------------- 1 | build() { 2 | 3 | echo "Building $2" 4 | 5 | obj="$HOME/Library/Caches/CurlHandle/$2/obj" 6 | sym="$HOME/Library/Caches/CurlHandle/$2/sym" 7 | rm -rf "$obj" 8 | rm -rf "$sym" 9 | xcodebuild -project $1.xcodeproj -target $2 -configuration Debug OBJROOT="$obj" SYMROOT="$sym" > /tmp/build.log 10 | res=$? 11 | 12 | if [ $res -ne 0 ]; 13 | then 14 | cat /tmp/build.log 15 | echo "$1 build failed" 16 | exit $res 17 | fi 18 | 19 | } 20 | 21 | # remove old versions 22 | rm -rf CURLHandleSource/built 23 | 24 | # build SFTP libraries too? 25 | 26 | if [ "$1" == "--all" ]; 27 | then 28 | cd SFTP 29 | build OpenSSL openssl 30 | build libssh2 libssh2 31 | cd .. 32 | 33 | elif [ "$1" == "--curl-only" ]; 34 | then 35 | echo "Skipping SFTP libraries" 36 | 37 | else 38 | echo "Usage: build-libs.sh { --all | --curl-only }" 39 | exit 0 40 | fi 41 | 42 | # build libcurl and libcares 43 | cd CURLHandleSource 44 | build CURLHandle libcurl 45 | 46 | echo "Done" 47 | open "built" -------------------------------------------------------------------------------- /Scripts/c-ares-clean.sh: -------------------------------------------------------------------------------- 1 | # glibtoolize (and maybe other tools) are not supplied with OS X. 2 | # Add default macports & homebrew paths in attempt to find them. 3 | export PATH=${PATH}:/opt/local/bin:/usr/local/bin 4 | 5 | # Clean original source dir, just in case. 6 | cd "${SRCROOT}/../c-ares" 7 | echo "Please ignore any messages about \"No rule to make target distclean.\" That just means the build dir is already clean." 8 | make distclean 9 | 10 | # Remove final output files from previous run. 11 | OUTDIR="${SRCROOT}/built" 12 | rm -Rf "${OUTDIR}/include/cares-i386" 13 | rm -Rf "${OUTDIR}/include/cares-x86_64" 14 | rm -f "${OUTDIR}/libcares.dylib" 15 | rm -Rf "${OUTDIR}/libcares.dylib.dSYM" 16 | 17 | # Remove intermediate output files from previous run. 18 | open "${OBJROOT}" 19 | rm -f "${OBJROOT}/libcares.dylib" 20 | rm -Rf "${OBJROOT}/libcares.dylib.dSYM" 21 | 22 | # Remove build dirs from previous run. 23 | rm -Rf "${OBJROOT}/cares-i386" 24 | rm -Rf "${OBJROOT}/cares-x86_64" 25 | -------------------------------------------------------------------------------- /Scripts/c-ares-combine.sh: -------------------------------------------------------------------------------- 1 | # glibtoolize (and maybe other tools) are not supplied with OS X. 2 | # Add default macports & homebrew paths in attempt to find them. 3 | export PATH=${PATH}:/opt/local/bin:/usr/local/bin 4 | 5 | # Create final dylibs. 6 | cd "${OBJROOT}" 7 | lipo -create -arch i386 cares-i386/.libs/libcares-i386.dylib -arch x86_64 cares-x86_64/.libs/libcares-x86_64.dylib -output libcares.dylib 8 | 9 | # Create dSYMs 10 | dsymutil libcares.dylib 11 | 12 | # Strip dylibs 13 | strip -x libcares.dylib 14 | 15 | # Final output to project dir, not build dir. 16 | OUTDIR="${SRCROOT}/built" 17 | mkdir -p "${OUTDIR}/include/cares-i386" 18 | mkdir -p "${OUTDIR}/include/cares-x86_64" 19 | cp -f libcares.dylib "${OUTDIR}" 20 | cp -Rf libcares.dylib.dSYM "${OUTDIR}" 21 | cp -f cares-i386/ares_build.h "${OUTDIR}/include/cares-i386" 22 | cp -f cares-x86_64/ares_build.h "${OUTDIR}/include/cares-x86_64" 23 | 24 | # Display results. 25 | lipo -detailed_info "${OUTDIR}/libcares.dylib" 26 | exit 0 27 | -------------------------------------------------------------------------------- /Scripts/c-ares-config.sh: -------------------------------------------------------------------------------- 1 | # First parameter should be "i386" or "x86_64" 2 | MODE=$1 3 | 4 | # glibtoolize (and maybe other tools) are not supplied with OS X. 5 | # Add default macports & homebrew paths in attempt to find them. 6 | export PATH=${PATH}:/opt/local/bin:/usr/local/bin 7 | 8 | # Copy source to a new location to build. 9 | cd "${SRCROOT}/.." 10 | mkdir -p "${OBJROOT}" 11 | cp -af c-ares "${OBJROOT}/cares-$MODE" 12 | 13 | # Buildconf 14 | cd "${OBJROOT}/cares-$MODE" 15 | echo "Please ignore any messages about \"No rule to make target distclean.\" That just means the build dir is already clean." 16 | make distclean 17 | echo "***" 18 | echo "***" 19 | echo "*** NOTE: Error messages about installing files are not errors. Please ignore. ***" 20 | echo "***" 21 | echo "***" 22 | ./buildconf 23 | 24 | # Configure 25 | ./configure \ 26 | CC="clang" \ 27 | CFLAGS="-isysroot ${SDKROOT} -arch $MODE -g -w -mmacosx-version-min=10.6" \ 28 | --host=$MODE-apple-darwin10 \ 29 | --with-sysroot="${SDKROOT}" \ 30 | --enable-debug \ 31 | --enable-optimize \ 32 | --disable-warnings \ 33 | --disable-werror \ 34 | --disable-curldebug \ 35 | --disable-symbol-hiding \ 36 | --enable-nonblocking \ 37 | --enable-shared \ 38 | --disable-static 39 | -------------------------------------------------------------------------------- /Scripts/c-ares-copy-built.sh: -------------------------------------------------------------------------------- 1 | # First parameter should be "i386" or "x86_64" 2 | MODE=$1 3 | 4 | # Copy ares_build.h for use by libcurl compile. 5 | cd "${OBJROOT}/cares-$MODE" 6 | cp -f ares_build.h ares_build-$MODE.h 7 | -------------------------------------------------------------------------------- /Scripts/c-ares-make.sh: -------------------------------------------------------------------------------- 1 | # First parameter should be "i386" or "x86_64" 2 | MODE=$1 3 | 4 | # glibtoolize (and maybe other tools) are not supplied with OS X. 5 | # Add default macports & homebrew paths in attempt to find them. 6 | export PATH=${PATH}:/opt/local/bin:/usr/local/bin 7 | 8 | cd "${OBJROOT}/cares-$MODE" 9 | make 10 | -------------------------------------------------------------------------------- /Scripts/curl-clean.sh: -------------------------------------------------------------------------------- 1 | # glibtoolize (and maybe other tools) are not supplied with OS X. 2 | # Add default macports & homebrew paths in attempt to find them. 3 | export PATH=${PATH}:/opt/local/bin:/usr/local/bin 4 | 5 | # Remove final output files from previous run. 6 | OUTDIR="${SRCROOT}/built" 7 | rm -f "${OUTDIR}/libcurl.dylib" 8 | rm -Rf "${OUTDIR}/libcurl.dylib.dSYM" 9 | 10 | # Remove intermediate output files from previous run. 11 | rm -f "${OBJROOT}/libcurl.dylib" 12 | rm -Rf "${OBJROOT}/libcurl.dylib.dSYM" 13 | 14 | # Remove build dirs from previous run. 15 | rm -Rf "${OBJROOT}/curl-i386" 16 | rm -Rf "${OBJROOT}/curl-x86_64" 17 | rm -Rf "${OBJROOT}/libssh2" 18 | rm -Rf "${OBJROOT}/c-ares-i386" 19 | rm -Rf "${OBJROOT}/c-ares-x86_64" 20 | -------------------------------------------------------------------------------- /Scripts/curl-combine.sh: -------------------------------------------------------------------------------- 1 | # glibtoolize (and maybe other tools) are not supplied with OS X. 2 | # Add default macports & homebrew paths in attempt to find them. 3 | export PATH=${PATH}:/opt/local/bin:/usr/local/bin 4 | 5 | # Create final dylibs. 6 | cd "${OBJROOT}" 7 | lipo -create -arch i386 curl-i386/lib/.libs/libcurl-i386.dylib -arch x86_64 curl-x86_64/lib/.libs/libcurl-x86_64.dylib -output libcurl.dylib 8 | 9 | # Create dSYMs 10 | dsymutil libcurl.dylib 11 | 12 | # Strip dylibs 13 | strip -x libcurl.dylib 14 | 15 | # Final output to project dir, not source/build dir. 16 | OUTDIR="${SRCROOT}/built" 17 | mkdir -p "${OUTDIR}/include/curl-i386/curl" 18 | mkdir -p "${OUTDIR}/include/curl-x86_64/curl" 19 | cp -f libcurl.dylib "${OUTDIR}" 20 | cp -Rf libcurl.dylib.dSYM "${OUTDIR}" 21 | cp -Rf curl-i386/include/curl/*.h "${OUTDIR}/include/curl-i386/curl/" 22 | cp -Rf curl-x86_64/include/curl/*.h "${OUTDIR}/include/curl-x86_64/curl/" 23 | 24 | # Display results. 25 | lipo -detailed_info "${OUTDIR}/libcurl.dylib" 26 | exit 0 27 | -------------------------------------------------------------------------------- /Scripts/curl-config.sh: -------------------------------------------------------------------------------- 1 | # First parameter should be "i386" or "x86_64" 2 | MODE=$1 3 | 4 | # glibtoolize (and maybe other tools) are not supplied with OS X. 5 | # Add default macports & homebrew paths in attempt to find them. 6 | export PATH=${PATH}:/opt/local/bin:/usr/local/bin 7 | 8 | # Copy source to a new location to build. 9 | cd "${SRCROOT}/.." 10 | mkdir -p "${OBJROOT}" 11 | cp -af curl "${OBJROOT}/curl-$MODE" 12 | 13 | # Copy libssh2 (we depend on it) headers & dylibs. 14 | cd "${SRCROOT}/../SFTP" 15 | mkdir -p "${OBJROOT}/libssh2/lib" 16 | cp -af libssh2/include "${OBJROOT}/libssh2" 17 | cp -f libssh2.dylib "${OBJROOT}/libssh2/lib" 18 | 19 | # Freaking unbelievably, we also have to copy the libs that libssh2 depends on to the proper relative runtime location, so that the ./configure script can load libssh2 at *configure* time. 20 | cd "${SRCROOT}/../SFTP" 21 | mkdir -p "${OBJROOT}/libssh2/Frameworks" 22 | cp -f libcrypto.dylib "${OBJROOT}/libssh2/Frameworks" 23 | cp -f libssl.dylib "${OBJROOT}/libssh2/Frameworks" 24 | 25 | # Copy libcares (we depend on it) headers & dylibs. 26 | cd "${SRCROOT}" 27 | mkdir -p "${OBJROOT}/c-ares-$MODE/include" 28 | mkdir -p "${OBJROOT}/c-ares-$MODE/lib" 29 | cp -f ../c-ares/ares*.h "${OBJROOT}/c-ares-$MODE/include" 30 | # Overwrite generic ares_build.h with the one from our actual build. 31 | cp -f built/include/cares-$MODE/ares_build.h "${OBJROOT}/c-ares-$MODE/include/ares_build.h" 32 | cp -f built/libcares.dylib "${OBJROOT}/c-ares-$MODE/lib" 33 | 34 | # Buildconf 35 | cd "${OBJROOT}/curl-$MODE" 36 | echo "Please ignore any messages about \"No rule to make target distclean.\" That just means the build dir is already clean." 37 | make distclean 38 | echo "***" 39 | echo "***" 40 | echo "*** NOTE: Error messages about installing files are not errors. Please ignore. ***" 41 | echo "***" 42 | echo "***" 43 | ./buildconf 44 | 45 | # Configure 46 | ./configure \ 47 | CC="clang" \ 48 | CFLAGS="-isysroot ${SDKROOT} -arch $MODE -g -w -mmacosx-version-min=10.6" \ 49 | --host=$MODE-apple-darwin10 \ 50 | --with-sysroot="${SDKROOT}" \ 51 | --with-darwinssl \ 52 | --with-libssh2="${OBJROOT}/libssh2" \ 53 | --enable-ares="${OBJROOT}/c-ares-$MODE" \ 54 | --without-libidn \ 55 | --enable-debug \ 56 | --enable-optimize \ 57 | --disable-warnings \ 58 | --disable-werror \ 59 | --disable-curldebug \ 60 | --disable-symbol-hiding \ 61 | --enable-shared \ 62 | --disable-static \ 63 | --enable-proxy 64 | ##--enable-threaded-resolver [either this or c-ares, this is heavy-uses a thread for every resolve call] 65 | -------------------------------------------------------------------------------- /Scripts/curl-make.sh: -------------------------------------------------------------------------------- 1 | # First parameter should be "i386" or "x86_64" 2 | MODE=$1 3 | 4 | # glibtoolize (and maybe other tools) are not supplied with OS X. 5 | # Add default macports & homebrew paths in attempt to find them. 6 | export PATH=${PATH}:/opt/local/bin:/usr/local/bin 7 | 8 | cd "${OBJROOT}/curl-$MODE" 9 | make 10 | -------------------------------------------------------------------------------- /Scripts/install-tools.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | brew update 4 | brew install automake 5 | brew versions automake 6 | cd /usr/local/Library/Formula/ 7 | git checkout 3a7567c /usr/local/Library/Formula/automake.rb 8 | brew unlink automake 9 | brew install automake 10 | 11 | brew install pkg-config 12 | brew install libtool 13 | 14 | -------------------------------------------------------------------------------- /Scripts/rename-install.sh: -------------------------------------------------------------------------------- 1 | # First parameter should be "i386" or "x86_64" 2 | MODE=$1 3 | 4 | # Second parameter should be the lib name, eg "curl" or "cares" 5 | NAME=$2 6 | 7 | # Third parameter is the location of the libs - eg ".libs" for c-ares, or "lib/.libs" for curl 8 | LIBSLOC=$3 9 | 10 | # glibtoolize (and maybe other tools) are not supplied with OS X. 11 | # Add default macports & homebrew paths in attempt to find them. 12 | export PATH=${PATH}:/opt/local/bin:/usr/local/bin 13 | 14 | # Correct the load commands of the dylibs. 15 | cd "${OBJROOT}/$NAME-$MODE/$LIBSLOC" 16 | 17 | # Get the full filenames of the dylibs from the symlinks. 18 | # E.g.: dylib:"libcrypto.1.0.0.dylib" symlink:"libcrypto.dylib" 19 | LONG_DYLIB=`readlink -n lib$NAME.dylib` 20 | 21 | # Fix ID. 22 | install_name_tool -id @rpath/lib$NAME.dylib ${LONG_DYLIB} 23 | 24 | # Correct load path of libs that we load (libssh2). 25 | # [already correct] install_name_tool -change /usr/local/lib/${LONG_DYLIB} @rpath/lib$NAME.dylib ${LONG_DYLIB} 26 | # Add rpath search paths. 27 | install_name_tool -add_rpath @loader_path/../Frameworks ${LONG_DYLIB} 28 | 29 | # Copy dylibs to have arch in name. 30 | cp -f ${LONG_DYLIB} lib$NAME-$MODE.dylib 31 | -------------------------------------------------------------------------------- /Scripts/setup: -------------------------------------------------------------------------------- 1 | name='Sam Deane' 2 | email='sam@elegantchaos.com' 3 | desc='Macbook Pro 15-inch, Mid 2010 2.66 GHz Intel Core i7' 4 | confopts='--with-ssl --enable-debug' 5 | notes='' 6 | fixed='4' 7 | -------------------------------------------------------------------------------- /Scripts/test-libs.sh: -------------------------------------------------------------------------------- 1 | build() { 2 | 3 | echo "Building $2" 4 | 5 | obj="$HOME/Library/Caches/CurlHandle/obj" 6 | sym="$HOME/Library/Caches/CurlHandle/sym" 7 | xcodebuild -project $1.xcodeproj -target $2 -configuration Debug OBJROOT="$obj" SYMROOT="$sym" > /tmp/build.log 8 | res=$? 9 | 10 | if [ $res -ne 0 ]; 11 | then 12 | cat /tmp/build.log 13 | echo "$1 build failed" 14 | exit $res 15 | fi 16 | 17 | } 18 | 19 | 20 | 21 | cd CURLHandleSource 22 | 23 | # if necessary, build everything first 24 | # this will leave the various object files knocking around that the tests will need 25 | # in theory we only require this step if we've not already built on this machine 26 | # (of if something has changed since then, of course) 27 | # since building is quite slow, it's helpful to be able to skip it 28 | 29 | if [ "$1" == "--build-and-test" ]; 30 | then 31 | build CURLHandle libcurl 32 | 33 | elif [ "$1" == "--test-only" ]; 34 | then 35 | echo "Skipping rebuilding libraries" 36 | 37 | else 38 | echo "Usage: test-libs.sh { --build-and-test | --test-only }" 39 | exit 0 40 | fi 41 | 42 | # buidling this target attempts to copy the 64 bit versions of the build libraries into 43 | # the right places, then invokes 'make test' to build and run the tests 44 | 45 | build CURLHandle libcurl-tests-x86_64 46 | 47 | echo "Tests done" 48 | 49 | cat /tmp/build.log 50 | -------------------------------------------------------------------------------- /Scripts/test.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | # This script builds and runs the unit tests and produces output in a format that is compatible with Jenkins. 4 | 5 | base=`dirname $0` 6 | pushd "$base/.." > /dev/null 7 | build="$PWD/test-build" 8 | ocunit2junit="$PWD/CURLHandleSource/Tests/MockServer/UnitTests/OCUnit2JUnit/bin/ocunit2junit" 9 | popd > /dev/null 10 | 11 | echo "Building and running tests into $build" 12 | 13 | sym="$build/sym" 14 | obj="$build/obj" 15 | 16 | testout="$build/output.log" 17 | testerr="$build/error.log" 18 | 19 | rm -rf "$build" 20 | mkdir -p "$build" 21 | 22 | xcodebuild -workspace "CURLHandle.xcworkspace" -scheme "CURLHandle" -sdk "macosx" -config "Debug" test OBJROOT="$obj" SYMROOT="$sym" > "$testout" 2> "$testerr" 23 | cd "$build" 24 | "$ocunit2junit" < "$testout" 25 | -------------------------------------------------------------------------------- /Scripts/useftpserver.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | defaults write otest CURLHandleFTPTestURL $1 4 | -------------------------------------------------------------------------------- /Scripts/usemockserver.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | defaults write otest CURLHandleFTPTestURL "MockServer" 4 | --------------------------------------------------------------------------------