ChatGPT解决这个技术问题 Extra ChatGPT

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

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

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


B
Ben G

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)无法连接到主机
运行此命令时出现上述错误: curl -x, --proxy 122.72.2.200:80 mysite.com/test.php?id=1
“-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
如上正确引用了文档,但是用户和密码的表达方式应不同:-x user:password@proxyhost:port
如果您需要 curl 并通过代理获取,请执行 curl -x GET mysite.com --proxy yourproxy:port
a
airween

一般方式:

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

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

并且,根据下面的评论,对于 https:

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

当需要代理HTTPS流量时,环境变量为大写:HTTPS_PROXY
man pages 环境变量可以指定为小写或大写。小写版本优先。 http_proxy 是一个例外,因为它只能以小写形式使用。使用环境变量设置代理与使用 --proxy 选项的效果相同。
@BipinVayalu,你想检查什么?这样,我上面描述的,客户端使用代理“直接方式”,不是透明的。因此,代理会给出标准的 HTTP 答案(包括 HTTP 代码)。如果您导出错误的 http_proxy 环境变量(例如错误端口...),客户端将无法连接到该变量,并给出错误消息:“警告!无法连接到远程主机!”,或类似的东西- 去尝试一下 :)
如果您检查 curl 源代码,您将在 url.c(版本 7.39 中的第 4337 行)看到他们检查小写版本,如果找不到,则检查大写。
大多数用户给我发了一个更正,现在我分享一下。如果你想通过代理使用 HTTPS 连接,那么你应该这样做: export https_proxy=your.proxy.server:port 注意,URL 模式中有“http”proto,而不是 httpS!
A
Amar

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

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

希望能更好地解决问题!


遇到同样的问题,Debian Wheezy 提供的 curl 仍然不支持 env 技巧
得到了这个[1] 4812
F
Filipe Correia

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

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

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


这对我不起作用,但使用 --socks5-hostname 可以。
@MichałRybak 的工作方式相同,但在代理端解析 DNS。有关详细信息,请参阅 man page
curl https://api.ipify.org --proxy socks5://189.100.246.182:37339 似乎对我来说很好用。使用 socks5 代理时,--proxy 选项是否在某种程度上不如 --socks5
@user993683 它取决于版本。 --proxy 现在可能是您想要的,但并不总是受支持。另请注意,socks5://socks5h:// 分别在连接到代理之前和之后执行主机名 (DNS) 解析。
A
Alejandro Moreno

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

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 就是您的 ip 和端口代理 :-)。

然后,简单地做

proxyon

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

proxyoff

unset http_prox ;) !
your system will start to use the proxy 不完全正确,您将仅在当前 shell 和子 shell 中启动/停止
C
Community

使用以下

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

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

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


这应该是答案。不是每个人都想为主机上每个 HTTP 客户端执行的每个 HTTP 请求指定一个全局变量(导出)。恕我直言,此选项提供了更大的灵活性。
当您针对 url 尝试不同的代理时,这非常有用。谢谢。
b
bmetge

我喜欢使用它来获取我所在的 IP

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

希望这可以帮助某人。


k
kenorb

对于 curl,您可以通过添加 proxy 值在 ~/.curlrc(Windows 上的 _curlrc)文件中配置代理,语法为:

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

而已!几年前在该文件中配置了代理设置,今天想知道为什么 curl 不再工作了,现在代理地址已更改并且 env vars 都设置正确。感谢那!
在 Windows 上,“_curlrc”文件可以(必须?)放在“%APPDATA%”目录中。
e
evandrix

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


考虑为您的解决方案添加解释。
M
Morteza Mashayekhi

只是总结所有伟大的提到的答案:

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

P
Pedro R. Sánchez A.

使用带有身份验证的代理,我使用:

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

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


o
overthink

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

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

也就是说,如果我知道我总是要使用代理,我会更喜欢 curl -x


e
evandrix

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


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

这对我来说非常有效,错误是因为 curl 需要设置代理 Remmember 用你的代理替换代理,我的,“示例”是 http://10.1.1.50:8080/。


M
Matt Legler

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

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

J
Jianwu Chen

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

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

然后我们可以设置 http_proxy 环境变量,并在 http 标头中包含身份验证令牌:Proxy-Authorization

导出 http_proxy=http://proxyserver:port

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


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