Làm cách nào để làm cho curl bỏ qua proxy?


106

Làm cách nào để làm cho curl bỏ qua proxy? Đặt $ NO_PROXY dường như không hiệu quả với tôi.


1
Nó sẽ giúp mọi người trả lời bạn nếu bạn cung cấp thêm một số thông tin. Bạn đang sử dụng nền tảng nào? Curl lấy cài đặt proxy từ đâu? Giao thức nào (HTTP, FTP)? Loại proxy nào (HTTP, SOCKS)? Nó có phải là một proxy minh bạch không? Bạn có thể hiển thị một bộ lệnh chính xác cho thấy vấn đề của bạn, cùng với đầu ra của chúng không?
Brian Campbell

Câu trả lời:


54

Tôi giả sử curl đang đọc địa chỉ proxy từ biến môi trường http_proxyvà biến đó sẽ giữ nguyên giá trị của nó. Sau đó, trong một vỏ bọc như bash,export http_proxy=''; trước một lệnh (hoặc trong một shell script) sẽ tạm thời thay đổi giá trị của nó.

(Xem hướng dẫn sử dụng của curl để biết tất cả các biến mà nó xem xét, dưới ENVIRONMENTtiêu đề.)


19
Hoặc đơn giảnunset http_proxy
joelittlejohn

Một lưu ý: có các biến env * _proxy khác như ftp_proxy. Tôi nghĩ, đây là danh sách đầy đủ wiki.archlinux.org/index.php/proxy_settings .
Dmitriusan

Nếu bạn không muốn ghi đè http_proxy theo từng trường hợp, bạn có thể định cấu hình các miền để bỏ qua với $ no_proxy, sau đó đặt biệt danh là curl của bạn: alias curl = 'curl --noproxy $ no_proxy'
Sir4ur0n

1
@jdebon Điều đó không hoạt động nếu bạn có ký tự đại diện trong biến môi trường đó, vì những lý do được mô tả bên dưới ( stackoverflow.com/a/17710829/2189128 ).
Jeff

@Jeff Đó không phải trường hợp của tôi, nhưng một điểm tốt, nó có thể gây ra một số vấn đề cho người khác. Cảm ơn!
Sir4ur0n

243

Nếu của bạn curllà phiên bản ít nhất 7.19.4, bạn chỉ có thể sử dụng --noproxycờ.

curl --noproxy "*" http://www.stackoverflow.com

Từ sách hướng dẫn .


5
curl: Tùy chọn --noproxy: không rõ
Roger Ng

2
@RogerNg, nếu hướng dẫn sử dụng hoặc cách sử dụng đã thay đổi kể từ khi tôi trả lời câu hỏi, vui lòng cập nhật câu trả lời hoặc viết của riêng bạn. Tuy nhiên, tại thời điểm viết bài, câu trả lời này là chính xác cho câu hỏi được đặt ra. Nếu cài đặt của bạn không hoạt động theo các thông số kỹ thuật, đó hoàn toàn là một vấn đề khác.
Scott Offen

3
curl --noproxy stackoverflow.com stackoverflow.com Đây là lời khen ngợi chính xác.
arulraj.net

2
Tôi giả định rằng --noproxytùy chọn đó không khả dụng cho các phiên bản curl cũ hơn (ví dụ: những phiên bản được sử dụng tại Centos / RHEL 5.x)
Dmitriusan

2
Dựa trên tài liệu, cách duy nhất mà điều này có thể hoạt động --noproxy 127.0.0.1là nếu stackoverflow.com đang chạy trên localhost.
dannysauer

70

Tôi gặp phải vấn đề tương tự vì tôi đặt các biến môi trường http_proxy và https_proxy. Nhưng đôi khi, tôi kết nối với một mạng khác và tạm thời cần bỏ qua proxy. Cách dễ nhất để làm điều này (mà không cần thay đổi các biến môi trường) là:

curl --noproxy '*' stackoverflow.com

Từ sách hướng dẫn: "Ký tự đại diện duy nhất là một ký tự * duy nhất, khớp với tất cả các máy chủ và vô hiệu hóa proxy một cách hiệu quả."

Ký tự * được trích dẫn để không bị mở rộng sai bởi shell.


12
lưu ý cho người dùng furture: Bash mở rộng các tập tin địa phương nếu tôi không trích dẫn * vì thếcurl --noproxy "*" stackoverflow.com
Adam

Rất hữu ích & đáng chú ý rằng điều này cũng dường như bỏ qua (SOCKS) proxy Tôi đã thiết lập trong file .curlrc tôi
MatzFan

1
Đây là câu trả lời mà đã làm việc cho tôi sử dụng curl phiên bản 7.22.0
xpereta

23

Điều này hoạt động tốt, hãy đặt chuỗi proxy thành ""

curl -x "" http://www.stackoverflow.com

11

Thêm tùy chọn proxy của bạn vào .curlrc

proxy = 1.2.3.4
noproxy = .dev,localhost,127.0.0.1

Điều này làm cho tất cả các miền nhà phát triển và yêu cầu máy cục bộ bỏ qua proxy.


1
//, Đây là ví dụ duy nhất hiển thị một ví dụ có giá trị có giá trị DNS bắt đầu bằng ..
Nathan Basanese

Đừng nhầm lẫn với no_proxy biến env (có gạch dưới)
Simon Perepelitsa

7

Lâu nhưng hãy thử đặt proxy thành "" (chuỗi trống) sẽ ghi đè mọi cài đặt proxy theo trang người dùng.


2
Đó không phải là một "cú sút xa" - đó là cách thích hợp để làm điều đó. Theo trang người đàn ông của tôi curl (7.15.5, không hiển thị tùy chọn '--noproxy'), -x / - proxy <proxyhost [: port]> ... Tùy chọn này ghi đè các biến môi trường hiện có đặt proxy thành sử dụng. Nếu có một biến môi trường đặt proxy, bạn có thể đặt proxy thành "" để ghi đè nó.
Rob Cranfill

5
Năm '09, mọi thứ đều là một cú sút xa.
Louis

5
+1, -x "" làm được. --noproxy với ký tự đại diện không hoạt động với bash của tôi ngay cả khi tôi trích dẫn "*"
Eugene

@Eugene: Nó đang hoạt động trong bash 4.3.11, và nó phải được trích dẫn.
karatedog


6

Đầu tiên, tôi đã liệt kê cài đặt proxy hiện tại với

env | sort | less

(phải là một cái gì đó giống như http_proxy=http://wpad.local.machine.location:port number)

Sau đó, tôi đã thử thiết lập

export http_proxy=";" 

đã đưa ra thông báo lỗi này:

curl: (5) Couldn't resolve proxy ';'

Đã thử

export http_proxy="" && curl http://servername:portnumber/destinationpath/ -d 55

va no đa hoạt động!

Tái bút! Hãy nhớ đặt http-proxy trở lại cài đặt ban đầu với

export http_proxy=http://wpad.local.machine.location:port number

6

Tôi có http_proxyhttps_proxyđược xác định. Tôi không muốn hủy đặt và thiết lập lại những môi trường đó nhưng --noproxy '*' hoạt động hoàn hảo đối với tôi.

curl --noproxy '*' -XGET 172.17.0.2:9200
{
  "status" : 200,
  "name" : "Medusa",
  "cluster_name" : "elasticsearch",
  "version" : {
    "number" : "1.5.0",
    "build_hash" : "544816042d40151d3ce4ba4f95399d7860dc2e92",
    "build_timestamp" : "2015-03-23T14:30:58Z",
    "build_snapshot" : false,
    "lucene_version" : "4.10.4"
  },
  "tagline" : "You Know, for Search"
}

1

Câu trả lời khập khiễng nhưng: Hãy nhớ đảm bảo rằng không có proxy nào được đặt trong ~/.curlrctệp (...).


1
Cảm ơn bạn. Tôi đã gãi đầu tại sao curl lại không tôn trọng các env vars địa phương. Và sau đó tôi tìm kiếm .curlrc và có một số cấu hình bổ sung. Đã thêm no_proxy ở đó và nó đã hoạt động!
n3o

1

Trong trường hợp của tôi (macos, curl 7.54.0), tôi đặt proxy bên dưới với~/.bash_profile

$ env |grep -i proxy |cut -d = -f1|sort
FTP_PROXY
HTTPS_PROXY
HTTP_PROXY
NO_PROXY
PROXY
ftp_proxy
http_proxy
https_proxy
no_proxy

Với lý do không xác định, phiên bản này curlkhông thể hoạt động với các biến môi trường NO_PRXYno_proxyđúng cách, sau đó tôi bỏ đặt các biến môi trường proxy lần lượt, cho đến cả hai HTTPS_PROXYhttps_proxy.

unset HTTPS_PROXY
unset https_proxy

nó bắt đầu hoạt động và có thể kết nối với các url nội bộ

Vì vậy, tôi khuyên bạn nên bỏ đặt tất cả các biến proxy nếu bạn có trong môi trường của mình như một giải pháp tạm thời.

unset http_proxy https_proxy HTTP_PROXY HTTPS_PROXY

-1

Curl của tôi đã không bỏ qua proxy trên Ubuntu 12.04 cho đến khi tôi đặt biến môi trường "no_proxy" (chữ thường). Tùy chọn --noproxy không khả dụng.

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.