615

I have this proxy address: 125.119.175.48:8909

How can I perform a HTTP request using cURL like curl http://www.example.com, but specifying the proxy address of my network?

0

19 Answers 19

832

From man curl:

-x, --proxy <[protocol://][user:password@]proxyhost[:port]>

     Use the specified HTTP proxy. 
     If the port number is not specified, it is assumed at port 1080.
Sign up to request clarification or add additional context in comments.

6 Comments

curl: (7) couldn't connect to host curl: (7) couldn't connect to host
I get above error when I run this command: curl -x, --proxy 122.72.2.200:80 mysite.com/test.php?id=1
"-x, --proxy" means that either one can be used. The command should be either "curl -x 122.72.2.200:80 mysite.com/test.php?id=1" or "curl --proxy 122.72.2.200:80 mysite.com/test.php?id=1"
The docs are correctly quoted as above, however, the user and password should be expressed differently: -x user:password@proxyhost:port
if you need to curl and get via proxy do curl -x GET mysite.com --proxy yourproxy:port
|
514

General way:

export http_proxy=http://your.proxy.server:port/

Then you can connect through proxy from (many) application.

And, as per comment below, for https:

export https_proxy=https://your.proxy.server:port/

13 Comments

When you need to proxy HTTPS traffic, the environment variable is upper case: HTTPS_PROXY
From the man pages The environment variables can be specified in lower case or upper case. The lower case version has precedence. http_proxy is an exception as it is only available in lower case. Using an environment variable to set the proxy has the same effect as using the --proxy option.
@BipinVayalu, what do you want to check? At this way, what I describe above, the client uses the proxy "direct way", not transparently. So, the proxy gives the standard HTTP answers (including HTTP codes). If you export a wrong http_proxy environment variable (eg. bad port...), the client could't connet to that, and it gives an error message: "Warning! Couldn't connect to remote host!", or something similar - just try it :)
If you check curl source code, you will see at url.c(line 4337 in verion 7.39) they check for lowercase version and if they can't find it, check for the uppercase.
Most users sent me a correction, now I share that. If you want to use HTTPS connection through proxy, then you should do this: export https_proxy=your.proxy.server:port Note, that there is "http" proto in URL schema, not httpS!
|
176

The above solutions might not work with some curl versions I tried them for myself(curl 7.22.0). But what worked for me was:

curl -x http://proxy_server:proxy_port --proxy-user username:password -L http://url

Hope it solves the issue better!

2 Comments

Run into the same issue, the curl shipped by Debian Wheezy still doesn't support the env trick
Got this instead [1] 4812
120

Beware that if you are using a SOCKS proxy, instead of a HTTP/HTTPS proxy, you will need to use the --socks5 switch instead:

curl --socks5 125.119.175.48:8909 http://example.com/

You can also use --socks5-hostname instead of --socks5 to resolve DNS on the proxy side.

4 Comments

This didn't work for me, but using --socks5-hostname did.
@MichałRybak that will work the same but resolve DNS on the proxy side. See the man page for more details.
curl https://api.ipify.org --proxy socks5://189.100.246.182:37339 seems to work fine for me. Is the --proxy option in some way inferior to --socks5 when using socks5 proxies?
@user993683 It's version-dependent. --proxy is probably what you want, now, but it wasn't always supported. Also note that socks5:// and socks5h:// perform hostname (DNS) resolution before and after connecting to the proxy, respectively.
64

as an adition to airween, another good idea is to add this into your .bashrc, so you'll be able to switch from non proxied to proxied environment:

alias proxyon="export http_proxy='http://YOURPROXY:YOURPORT';export https_proxy='http://YOURPROXY:YOURPORT'"
alias proxyoff="export http_proxy='';export https_proxy=''"

WHERE YOURPROXY:YOURPORT is exactly that, your ip and port proxy :-).

Then, simply doing

proxyon

your system will start to use the proxy, and just the opposite with:

proxyoff

2 Comments

unset http_prox ;) !
your system will start to use the proxy not completely correct, you will start/stop only in current shell and subshells
43

use the following

curl -I -x 192.168.X.X:XX http://google.com

192.168.X.X:XX put your proxy server ip and port.

-v verbose mode it will give more details including headers and response.

2 Comments

This should be the answer. Not everyone wants to specify a global variable (export) for every HTTP request performed by every HTTP client on your host. This option gives more flexibility, IMHO.
This is so useful when you're trying different proxies against an url. Thanks.
33

I like using this in order to get the IP under which I am seen

curl -x http://proxy_server:proxy_port https://api.ipify.org?format=json && echo

Hope this helps someone.

Comments

28

For curl you can configure proxy in your ~/.curlrc (_curlrc on Windows) file by adding proxy value, the syntax is:

proxy = http://username:password@proxy-host:port

2 Comments

That's it! Configured the proxy setting some years ago in that file and wondered today, why curl doesn't work anymore now the proxy adress changed and the env vars are all set correct. Thanks for that!
On Windows, the "_curlrc" file can (must?) be placed into the "%APPDATA%" directory.
25

curl -I "https://www.google.com" -x 1.1.1.1:8080

1 Comment

Consider adding explanation to your solution.
16

Just summarizing all great mentioned answers:

curl -x http://<user>:<pass>@<proxyhost>:<port>/ -o <filename> -L <link>

Comments

10

With a proxy with authentication I use:

curl -x <protocol>://<user>:<password>@<host>:<port> --proxy-anyauth <url>

because, I don't know why curl doesn't use/catch http[s]_proxy environment variables.

Comments

5

You don't need to export the http[s]_proxy shell variable if you're just setting the proxy for a one off command. e.g.

http_proxy=http://your.proxy.server:port curl http://www.example.com

That said, I'd prefer curl -x if I knew I was always going to use a proxy.

Comments

4
sudo curl -x http://10.1.1.50:8080/ -fsSL https://download.docker.com/linux/ubuntu/gpg

This worked perfectly for me, the error comes because curl need to set the proxy

Remmember replace the proxy with your proxy, mine, "example" was http://10.1.1.50:8080/.

Comments

4

curl -vv -ksL "https://example.com" -x "http://<proxy>:<port>"

Comments

2

Depending on your workplace, you may also need to specify the -k or the --insecure option for curl in order to get past potential issues with CA certificates.

curl -x <myCompanyProxy>:<port> -k -O -L <link to file to download>

Comments

2

For http proxy tunnels (needed for the TLS protocol), you need to specify -p (aka --proxytunnel) instead of -x.

curl post about proxies

tl;dr the proxy tunnel uses a newer "CONNECT" keyword instead of a modified "GET"

This was needed for the node http-proxy-middleware library.

Only got a clue once I used wget which worked out of the box.

Comments

1
curl -x socks5://username:password@ip:port example.com

Comments

0

In case the proxy is using automatic proxy with PAC file. We can find the actual proxy from the javascript from the PAC URL.

And if the proxy needs authentication, we can first use a normal web-browser to access the website which will promote authentication dialog. After authentication, we can use wireshark to capture the http package sends to the proxy server, from the http package, we can get the auth token from http header: Proxy-Authorization

Then we can set the http_proxy environment variable and also include auth token in the http header: Proxy-Authorization

export http_proxy=http://proxyserver:port

curl -H "Proxy-Authorization: xxxx" http://targetURL

Comments

0

If there are any proxy related environment variables set then they can interfere with curl's behaviour - notably no_proxy = '*' (or NO_PROXY) will disable the use of proxies by curl.

To ensure curl's behaviour is not affected by any environment variables - you should run the command prefixed with env -i which will clear the environment for the invocation of curl:

env -i curl -x your_proxy your_url

Note: If you run curl with the verbose option (-v) it will log if it is using the no_proxy (or NO_PROXY) variable. For example, if it was set (e.g. export no_proxy='*') you would see:

curl -v -x your_proxy your_url

* Uses proxy env variable no_proxy == '*'
...

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.