EasyCurl is a lightweight Julia package that provides a user-friendly wrapper for the libcurl C library, for making requests.
| Protocols: | HTTP/HTTPS |
IMAP/IMAPS |
|---|---|---|
✓ |
✓ |
To install EasyCurl, simply use the Julia package manager:
] add EasyCurlHere is an example usage of EasyCurl:
In the example, a POST request is sent to http://httpbin.org/post using the en0 network interface
using EasyCurl
# 'interface' argument specifies the network interface to use for the request
# 'read_timeout' and 'connect_timeout' define how long to wait for a response or connection
# 'retry' argument specifies how many times to retry the request if it fails initially
response = http_request(
"POST",
"http://httpbin.org/post";
headers = Pair{String,String}[
"Content-Type" => "application/json",
"User-Agent" => "EasyCurl.jl",
],
query = "qry=你好嗎",
body = "{\"data\":\"hi\"}",
interface = "en0",
read_timeout = 5,
connect_timeout = 10,
retry = 10,
)
julia> http_body(response) |> String |> print
{
"args": {
"qry": "\u4f60\u597d\u55ce"
},
"data": "{\"data\":\"hi\"}",
"files": {},
"form": {},
"headers": {
"Accept": "*/*",
"Accept-Encoding": "gzip",
"Content-Length": "13",
"Content-Type": "application/json",
"Host": "httpbin.org",
"User-Agent": "EasyCurl.jl",
"X-Amzn-Trace-Id": "Root=1-66e0dce3-7dbea4a9357524fb19628e26"
},
"json": {
"data": "hi"
},
"origin": "100.250.50.140",
"url": "http://httpbin.org/post?qry=\u4f60\u597d\u55ce"
}This example shows how to use CurlClient for making HTTP requests by reusing the same client instance, which can help in speeding up the requests when making multiple calls to the same server:
using EasyCurl
curl_client = CurlClient()
# Perform a GET request
response = http_request(
curl_client,
"GET",
"http://httpbin.org/get";
headers = Pair{String,String}[
"Content-Type" => "application/json",
"User-Agent" => "EasyCurl.jl",
],
)
julia> http_body(response) |> String |> print
{
"args": {},
"headers": {
"Accept": "*/*",
"Accept-Encoding": "gzip",
"Content-Type": "application/json",
"Host": "httpbin.org",
"User-Agent": "EasyCurl.jl",
"X-Amzn-Trace-Id": "Root=1-66e0de99-735b60c138a5445c7f7b5c7e"
},
"origin": "100.250.50.140",
"url": "http://httpbin.org/get"
}
close(curl_client)In addition to HTTP, you can also make IMAP requests to retrieve email from a server:
using EasyCurl
response = imap_request(
"imaps://imap.gmail.com:993",
"[email protected]",
"password";
mailbox = "INBOX",
command = "SEARCH SINCE 09-Sep-2024",
)
julia> imap_body(response) |> String |> print
* SEARCH 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629To use a proxy for all your HTTP and HTTPS requests in EasyCurl, you can set the following environment variables:
all_proxy: Proxy for all protocolshttp_proxy: Proxy for HTTP requestshttps_proxy: Proxy for HTTPS requestsno_proxy: Domains to exclude from proxying
# 'your_proxy_username' your proxy account's username
# 'your_proxy_password' your proxy account's password
# 'your_proxy_host' the hostname or IP address of your proxy server
# 'your_proxy_port' the port number your proxy server listens on
# socks5 proxy for all protocols
ENV["all_proxy"] = "socks5://your_proxy_username:your_proxy_password@your_proxy_host:your_proxy_port"
# domains that should bypass the proxy
ENV["no_proxy"] = "localhost,.local,.mywork"When executing the http_request function with the proxy parameter, it will ignore the environment variable settings for proxies
julia> http_request("GET", "http://httpbin.org/get",
proxy = "socks5://your_proxy_username:your_proxy_password@your_proxy_host:your_proxy_port")To run the tests, you need either a local httpbin (default) or an external service.
Option 1: Use an external httpbin service
By default, tests use http://httpbin.org.
You can override this by setting the HTTPBIN_URL environment variable.
Option 2: Run a local httpbin service with Docker
# Start httpbin in Docker (Docker must be installed)
docker run -d -p 80:80 --name httpbin kennethreitz/httpbin
# Set environment variable to point to the local instance
export HTTPBIN_URL=http://localhost
# Run tests
julia --project -e 'using Pkg; Pkg.test()'
# Stop and remove the container after tests
docker stop httpbin && docker rm httpbinContributions to EasyCurl are welcome! If you encounter a bug, have a feature request, or would like to contribute code, please open an issue or a pull request on GitHub.