使用cURL执行HTTP请求(使用PROXY)


451

我有这个代理地址: 125.119.175.48:8909

如何使用cURL之类的来执行HTTP请求curl http://www.example.com,但指定网络的代理地址?

Answers:


411

一般方式:

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

然后,您可以通过来自(许多)应用程序的代理进行连接。

并且,按照下面的注释,对于https:

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

76
当您需要代理HTTPS通信时,环境变量为大写:HTTPS_PROXY
phatblat 2012年

18
手册页中可以小写或大写指定环境变量。小写版本优先。http_proxy是一个例外,因为它仅在小写形式下可用。使用环境变量设置代理与使用--proxy选项具有相同的效果。
普顿船长

@BipinVayalu,您想检查什么?这样,正如我在上面描述的,客户端使用代理“直接方式”,而不是透明地。因此,代理提供了标准的HTTP答案(包括HTTP代码)。如果导出错误的http_proxy环境变量(例如,错误的端口...),则客户端将无法连接到该变量,并且会显示错误消息:“警告!无法连接到远程主机!”或类似的内容-试试吧:)
播出

15
如果您检查curl源代码,您将在url.c(版本7.39中的第4337行)处看到它们检查小写版本,如果找不到,则检查大写。
Raistmaj 2014年

1
大多数用户都给我发了一个更正,现在我分享。如果要通过代理使用HTTPS连接,则应执行以下操作:export https_proxy = your.proxy.server:port 注意,URL模式中存在“ http”协议,而不是httpS!
播出

661

来自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.

curl:(7)无法连接到主机curl:(7)无法连接到主机
user873286 2012年

运行此命令时出现上述错误:curl -x,--proxy 122.72.2.200:80 mysite.com/test.php?id=1
user873286 2012年

61
“ -x,--proxy”表示可以使用任何一个。命令应为“ curl -x 122.72.2.200:80 mysite.com/test.php?id=1 ”或“ curl --proxy 122.72.2.200:80 mysite.com/test.php?id=1
IBBoard

8
正确引用了上述文档,但是,用户名和密码应以不同的方式表示:-x user:password@proxyhost:port
Ed Chapel

感谢您的最佳答案!
haotang

128

上述解决方案可能不适用于某些我自己尝试的curl版本(curl 7.22.0)。但是对我有用的是:

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

希望它能更好地解决问题!


碰到同样的问题,Debian Wheezy运送的卷发仍然不支持env技巧
hyperknot 2014年

取而代之的是[1] 4812
Aminah Nuraini '17

80

请注意,如果您使用的是SOCKS代理而不是HTTP / HTTPS代理,则需要使用--socks5开关:

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

您也可以在代理端使用--socks5-hostname而不是--socks5解析DNS。


6
这对我--socks5-hostname没有用,但是使用了。
米哈尔Rybak的

2
@MichałRybak可以相同,但是在代理端解析DNS。有关更多详细信息,请参见手册页
Filipe Correia

3
curl https://api.ipify.org --proxy socks5://189.100.246.182:37339似乎对我来说很好。该--proxy选项在某种程度上是否逊于--socks5使用socks5代理?

@ user993683这取决于版本。--proxy现在可能是您想要的,但是并不总是支持它。另请注意,分别在连接到代理之前和之后执行socks5://socks5h://解析主机名(DNS)。
Michael-Clay Shirky在哪里,

51

作为间隔之间的一种补充,另一个好主意是将其添加到您的.bashrc中,这样您就可以从非代理环境切换到代理环境:

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

在您的PROXY:YOURPORT就是这样,您的IP和端口代理:-)。

然后,只需做

proxyon

您的系统将开始使用代理,与之相反的是:

proxyoff

34

使用以下

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

192.168.X.X:XX 把您的代理服务器的IP和端口。

-v 详细模式将提供更多详细信息,包括标题和响应。


2
这应该是答案。并非每个人都希望为主机上每个HTTP客户端执行的每个HTTP请求指定一个全局变量(导出)。恕我直言,此选项提供了更大的灵活性。
ivanleoncz

当您尝试针对URL使用不同的代理时,此功能非常有用。谢谢。
redAce

30

您可以使用 :

curl http://www.example.com --proxy http://125.119.175.48:8909

正如卡尔所解释的


25
“正如卡尔所解释的”,这意味着该答案并不比该答案的副本更好。
拉德瓦尔德

26

我喜欢使用它来获得我所看到的IP

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

希望这对某人有帮助。


19

对于curl您可以在配置代理服务器~/.curlrc_curlrc通过添加在Windows上)文件proxy值,语法是:

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

而已!几年前在该文​​件中配置了代理服务器设置,而今天又想知道,为什么现在代理服务器地址已更改且env vars都正确设置,为什么curl不再起作用。感谢那!
emale,

15

只需总结所有提到的出色答案:

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

8

通过具有身份验证的代理,我使用:

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

因为,我不知道为什么curl不使用/捕获http [s] _proxy环境变量。



3

http[s]_proxy如果您只是为一个off命令设置代理,则无需导出shell变量。例如

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

就是说,curl -x如果我知道我总是要使用代理服务器,我会更愿意。


2

根据您的工作场所,您可能还需要为curl 指定-k--insecure选项,以解决CA证书过去的潜在问题。

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

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

这对我来说效果很好,出现错误是因为curl需要设置代理

请记住,用您的代理替换该代理,我的“示例”为 http://10.1.1.50:8080/


0

如果代理使用带有PAC文件的自动代理。我们可以从PAC URL中的javascript中找到实际的代理。

如果代理需要身份验证,我们可以首先使用普通的网络浏览器访问网站,这将促进身份验证对话框。认证之后,我们可以使用wireshark捕获从http包发送到代理服务器的http包,我们可以从http标头获取auth令牌: Proxy-Authorization

然后,我们可以设置http_proxy环境变量,还可以在http标头中包含auth令牌: Proxy-Authorization

导出http_proxy = http:// proxyserver:port

curl -H“代理授权:xxxx” http:// targetURL

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.