cURL로 HTTP 요청 수행 (PROXY 사용)


451

이 프록시 주소가 있습니다 : 125.119.175.48:8909

과 같은 cURL을 사용 curl http://www.example.com하지만 네트워크의 프록시 주소를 지정 하여 HTTP 요청을 수행하려면 어떻게해야 합니까?

답변:


411

일반적인 방법 :

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

그런 다음 (다수) 응용 프로그램에서 프록시를 통해 연결할 수 있습니다.

그리고 아래의 의견에 따라 https의 경우 :

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

76
HTTPS 트래픽을 프록시해야하는 경우 환경 변수는 대문자입니다. HTTPS_PROXY
phatblat

18
로부터 man 페이지 환경 변수는 소문자 나 대문자로 지정 될 수 있습니다. 소문자 버전이 우선합니다. http_proxy는 소문자로만 제공되므로 예외입니다. 환경 변수를 사용하여 프록시를 설정하면 --proxy 옵션을 사용하는 것과 동일한 효과가 있습니다.
캡틴 렙턴

@BipinVayalu, 무엇을 확인하고 싶습니까? 이 방법으로 위에서 설명한 것처럼 클라이언트는 투명하지 않고 프록시 "직접 방법"을 사용합니다. 따라서 프록시는 표준 HTTP 응답 (HTTP 코드 포함)을 제공합니다. 잘못된 http_proxy 환경 변수 (예 : 잘못된 포트 ...)를 내 보내면 클라이언트가 해당 포트에 연결할 수 없으며 "경고! 원격 호스트에 연결할 수 없습니다!"또는 이와 유사한 오류 메시지가 표시됩니다. -그냥 시도해보십시오 :)
airween

15
curl 소스 코드를 확인하면 url.c (verion 7.39의 4337 행)에서 소문자 버전을 확인하고 찾을 수 없으면 대문자를 확인하십시오.
Raistmaj

1
대부분의 사용자는 저에게 정정을 보냈으며 이제는 그 사실을 공유합니다. 프록시를 통한 HTTPS 연결을 사용하려면 다음을 수행해야합니다. export https_proxy = your.proxy.server : port 참고 : URL 스키마에는 httpS가 아니라 "http"프로토 타입이 있습니다.
airween

662

보낸 사람 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

curl -x, --proxy 122.72.2.200:80 mysite.com/test.php?id=1
user873286

61
"-x, --proxy"는 둘 중 하나를 사용할 수 있음을 의미합니다. 이 명령은 "컬 -x 122.72.2.200:80이어야한다 mysite.com/test.php?id=1 "또는 "컬 --proxy 122.72.2.200:80 mysite.com/test.php?id=1 "
IBBoard

8
문서는 위와 같이 올바르게 인용되지만 사용자와 비밀번호는 다르게 표현되어야합니다.-x user:password@proxyhost:port
Ed Chapel

최상의 답변을 주셔서 감사합니다!
haotang

128

위의 솔루션은 내가 시도한 일부 컬 버전에서 작동하지 않을 수 있습니다 (curl 7.22.0). 그러나 나를 위해 일한 것은 다음과 같습니다.

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

그것이 문제를 더 잘 해결하기를 바랍니다!


같은 문제가 발생하더라도 데비안 위지 (Debian Wheezy)가 제공 한 컬은 여전히 ​​env 트릭을 지원하지 않습니다
hyperknot

대신에[1] 4812
Aminah Nuraini

80

HTTP / HTTPS 프록시 대신 SOCKS 프록시를 사용하는 경우 --socks5대신 스위치 를 사용해야합니다 .

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

프록시 쪽에서 DNS를 확인 하는 --socks5-hostname대신 사용할 수도 있습니다 --socks5.


6
이것은 나를 위해 작동하지 않았지만 사용했습니다 --socks5-hostname.
Michał Rybak

2
@ MichałRybak는 동일하게 작동하지만 프록시 쪽에서 DNS를 확인합니다. 자세한 내용은 매뉴얼 페이지 를 참조하십시오.
Filipe Correia

3
curl https://api.ipify.org --proxy socks5://189.100.246.182:37339나를 위해 잘 작동하는 것 같습니다. 는 IS --proxy열등 어떤 식 으로든 옵션 --socks5SOCKS5 프록시를 사용하는 경우는?

@ user993683 버전에 따라 다릅니다. --proxy아마 지금 당신이 원하는 것이지만 항상 지원되는 것은 아닙니다. 또한 주목 socks5://하고 socks5h://전에 각각 프록시에 연결 한 후 호스트 (DNS) 확인을 수행한다.
마이클 - 어디의 클레이 셔키

51

airween에 대한 제안으로, 또 다른 좋은 아이디어는 이것을 .bashrc에 추가하여 프록시되지 않은 환경에서 프록시 환경으로 전환 할 수 있다는 것입니다.

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

YOURPROXY : 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 요청에 대해 전역 변수 (내보내기)를 지정하려는 것은 아닙니다. 이 옵션은 더 많은 유연성을 제공합니다 (IMHO).
ivanleoncz

이것은 URL에 대해 다른 프록시를 시도 할 때 매우 유용합니다. 감사.
redAce

30

당신이 사용할 수있는 :

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

Karl의 설명대로


25
"Karl에 의해 설명 된대로", 이것은이 답변이 그 답변의 사본보다 낫다는 것을 의미합니다.
Raedwald

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

그게 다야! 몇 년 전에 해당 파일에서 프록시 설정을 구성하고 오늘날 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 명령에 프록시를 설정하는 경우 쉘 변수 를 내보낼 필요가 없습니다 . 예 :

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

즉, curl -x항상 프록시를 사용한다는 것을 알고 있다면 선호 합니다.


2

직장에 따라 CA 인증서와 관련된 잠재적 문제를 극복하기 위해 curl에 대한 -k또는 --insecure옵션 을 지정해야 할 수도 있습니다 .

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이 프록시를 설정해야하기 때문에 오류가 발생했습니다.

프록시를 프록시로 바꾸십시오 . "example"은 http://10.1.1.50:8080/ 입니다.


0

프록시가 PAC 파일과 함께 자동 프록시를 사용하는 경우 PAC URL의 javascript에서 실제 프록시를 찾을 수 있습니다.

프록시에 인증이 필요한 경우 먼저 일반 웹 브라우저를 사용하여 인증 대화 상자를 홍보하는 웹 사이트에 액세스 할 수 있습니다. 인증 후, wireshark를 사용하여 http 패키지가 프록시 서버로 보내는 http 패키지를 캡처 할 수 있습니다. http 패키지에서 http 헤더에서 인증 토큰을 얻을 수 있습니다. Proxy-Authorization

그런 다음 http_proxy 환경 변수를 설정하고 http 헤더에 인증 토큰을 포함시킬 수 있습니다. Proxy-Authorization

수출 http_proxy = http : // proxyserver : port

curl -H "프록시 인증 : xxxx" http : // targetURL

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.