thực hiện các yêu cầu HTTP với cURL (sử dụng PROXY)


451

Tôi có địa chỉ proxy này: 125.119.175.48:8909

Làm cách nào tôi có thể thực hiện yêu cầu HTTP bằng cURL như thế nào curl http://www.example.com, nhưng chỉ định địa chỉ proxy của mạng của tôi?

Câu trả lời:


411

Cách chung:

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

Sau đó, bạn có thể kết nối thông qua proxy từ (nhiều) ứng dụng.

Và, theo nhận xét bên dưới, cho https:

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

76
Khi bạn cần proxy lưu lượng HTTPS, biến môi trường là chữ hoa: HTTPS_PROXY
phatblat

18
Từ trang man Các biến môi trường có thể được chỉ định bằng chữ thường hoặc chữ hoa. Các phiên bản chữ thường đã được ưu tiên. http_proxy là một ngoại lệ vì nó chỉ có sẵn trong trường hợp thấp hơn. Sử dụng biến môi trường để đặt proxy có tác dụng tương tự như sử dụng tùy chọn --proxy.
Thuyền trưởng Lepton

@BipinVayalu, bạn muốn kiểm tra cái gì? Theo cách này, những gì tôi mô tả ở trên, khách hàng sử dụng proxy "cách trực tiếp", không minh bạch. Vì vậy, proxy cung cấp các câu trả lời HTTP tiêu chuẩn (bao gồm cả mã HTTP). Nếu bạn xuất sai biến môi trường http_proxy (ví dụ: cổng xấu ...), máy khách không thể kết nối với nó và nó đưa ra thông báo lỗi: "Cảnh báo! Không thể kết nối với máy chủ từ xa!", Hoặc một cái gì đó tương tự - cứ thử đi :)
sóng

15
Nếu bạn kiểm tra mã nguồn curl, bạn sẽ thấy tại url.c (dòng 4337 trong câu 7.39) họ kiểm tra phiên bản chữ thường và nếu họ không thể tìm thấy nó, hãy kiểm tra chữ hoa.
Raistmaj

1
Hầu hết người dùng đã gửi cho tôi một sự điều chỉnh, bây giờ tôi chia sẻ điều đó. Nếu bạn muốn sử dụng kết nối HTTPS thông qua proxy, thì bạn nên thực hiện việc này: export https_proxy = your.proxy.server: port Lưu ý rằng có "http" proto trong lược đồ URL, không phải httpS!
sóng

662

Từ 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) không thể kết nối với máy chủ curl: (7) không thể kết nối với máy chủ
user873286

Tôi gặp lỗi trên khi chạy lệnh này: curl -x, --proxy 122.72.2.200:80 mysite.com/test.php?id=1
user873286

61
"-X, --proxy" có nghĩa là một trong hai có thể được sử dụng. Lệnh phải là "curl -x 122.72.2.200:80 mysite.com/test.php?id=1 " hoặc "curl --proxy 122.72.2.200:80 mysite.com/test.php?id=1 "
IBBoard

8
Các tài liệu được trích dẫn chính xác như trên, tuy nhiên, người dùng và mật khẩu nên được thể hiện khác nhau:-x user:password@proxyhost:port
Ed Chapel

Cảm ơn câu trả lời tốt nhất!
haotang

128

Các giải pháp trên có thể không hoạt động với một số phiên bản curl tôi đã thử chúng cho bản thân (curl 7.22.0). Nhưng những gì làm việc cho tôi là:

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

Hy vọng nó giải quyết vấn đề tốt hơn!



Thay vào đó[1] 4812
Aminah Nuraini

80

Xin lưu ý rằng nếu bạn đang sử dụng proxy SOCKS, thay vì proxy HTTP / HTTPS, bạn sẽ cần sử dụng công --socks5tắc thay thế:

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

Bạn cũng có thể sử dụng --socks5-hostnamethay vì --socks5để giải quyết DNS ở phía proxy.


6
Điều này không làm việc cho tôi, nhưng sử dụng --socks5-hostnameđã làm.
Michał Rybak

2
@ MichałRybak sẽ hoạt động tương tự nhưng giải quyết DNS ở phía proxy. Xem trang người đàn ông để biết thêm chi tiết.
Filipe Correia

3
curl https://api.ipify.org --proxy socks5://189.100.246.182:37339dường như làm việc tốt cho tôi Là --proxylựa chọn theo một cách nào đó kém hơn --socks5khi sử dụng proxy5 proxy?

@ user993683 Nó phụ thuộc vào phiên bản. --proxybây giờ có lẽ là những gì bạn muốn, nhưng nó không phải lúc nào cũng được hỗ trợ. Cũng lưu ý rằng socks5://socks5h://thực hiện độ phân giải tên máy chủ (DNS) trước và sau khi kết nối với proxy, tương ứng.
Michael - Clay Shirky ở đâu

51

như một lời quảng cáo cho airween, một ý tưởng hay khác là thêm phần này vào .bashrc của bạn, vì vậy bạn sẽ có thể chuyển từ môi trường không được ủy quyền sang môi trường được ủy quyền:

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

WHERE YOUPROXY: MYANCE chính xác là như vậy, proxy và cổng proxy của bạn :-).

Sau đó, chỉ cần làm

proxyon

hệ thống của bạn sẽ bắt đầu sử dụng proxy và ngược lại với:

proxyoff

34

sử dụng như sau

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

192.168.X.X:XX đặt ip và cổng máy chủ proxy của bạn.

-v Chế độ dài dòng nó sẽ cung cấp thêm chi tiết bao gồm các tiêu đề và phản hồi.


2
Đây nên là câu trả lời. Không phải ai cũng muốn chỉ định một biến toàn cục (xuất) cho mọi yêu cầu HTTP được thực hiện bởi mọi máy khách HTTP trên máy chủ của bạn. Tùy chọn này cho phép linh hoạt hơn, IMHO.
ivanleoncz

Điều này rất hữu ích khi bạn đang thử các proxy khác nhau dựa trên url. Cảm ơn.
redAce

30

bạn có thể dùng :

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

như được giải thích bởi Karl


25
"như được giải thích bởi Karl", có nghĩa là câu trả lời này không tốt hơn một bản sao của câu trả lời đó.
Raedwald

26

Tôi thích sử dụng điều này để có được IP mà tôi được nhìn thấy

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

Hy vọng điều này sẽ giúp được ai đó.


19

Để curlbạn có thể định cấu hình proxy trong tệp ~/.curlrc( _curlrctrên Windows) của mình bằng cách thêm proxygiá trị, cú pháp là:

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

Đó là nó! Định cấu hình cài đặt proxy vài năm trước trong tệp đó và tự hỏi ngày hôm nay, tại sao hiện tại curl không hoạt động nữa, địa chỉ proxy đã thay đổi và các env vars đều được đặt chính xác. Cảm ơn vì điều đó!
emale

15

Chỉ cần tóm tắt tất cả các câu trả lời được đề cập tuyệt vời:

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

8

Với một proxy có xác thực tôi sử dụng:

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

bởi vì, tôi không biết tại sao curl không sử dụng / bắt các biến môi trường http [s] _proxy .


6
C:\Desktop>curl --head https://www.google.com/ --proxy 1.1.1.1:8080

6
Xem xét thêm lời giải thích cho giải pháp của bạn.
Pochmurnik

3

Bạn không cần xuất http[s]_proxybiến shell nếu bạn chỉ đặt proxy cho lệnh tắt một lần. ví dụ

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

Điều đó nói rằng, tôi thích hơn curl -xnếu tôi biết tôi sẽ luôn sử dụng proxy.


2

Tùy thuộc vào nơi làm việc của bạn, bạn cũng có thể cần chỉ định -khoặc --insecuretùy chọn cuộn tròn để vượt qua các vấn đề tiềm ẩn với chứng chỉ 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

Điều này làm việc hoàn hảo với tôi, lỗi xảy ra vì curl cần phải đặt proxy

Remmember thay thế proxy bằng proxy của bạn, "ví dụ" là http://10.1.1.50:8080/ .


0

Trong trường hợp proxy đang sử dụng proxy tự động với tệp PAC. Chúng tôi có thể tìm thấy proxy thực tế từ javascript từ URL PAC.

Và nếu proxy cần xác thực, trước tiên chúng ta có thể sử dụng trình duyệt web bình thường để truy cập trang web sẽ thúc đẩy hộp thoại xác thực. Sau khi xác thực, chúng tôi có thể sử dụng wireshark để chụp gói http gửi đến máy chủ proxy, từ gói http, chúng tôi có thể nhận mã thông báo xác thực từ tiêu đề http: Ủy quyền ủy quyền

Sau đó, chúng ta có thể đặt biến môi trường http_proxy và cũng bao gồm mã xác thực auth trong tiêu đề http: Proxy-Authorization

xuất http_proxy = http: // proxyserver: cổng

curl -H "Ủy quyền ủy quyền: xxxx" http: // targetURL

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.