ฉันจะทำให้ curl ไม่สนใจพร็อกซีได้อย่างไร


109

ฉันจะทำให้ curl ไม่สนใจพร็อกซีได้อย่างไร การตั้งค่า $ NO_PROXY ดูเหมือนจะไม่ได้ผลสำหรับฉัน


1
จะช่วยให้ผู้คนตอบคุณได้หากคุณให้ข้อมูลเพิ่มเติม คุณอยู่บนแพลตฟอร์มอะไร curl รับการตั้งค่าพร็อกซีจากที่ไหน โปรโตคอลอะไร (HTTP, FTP)? พร็อกซีประเภทใด (HTTP, SOCKS)? เป็นพร็อกซีโปร่งใสหรือไม่? คุณสามารถแสดงชุดคำสั่งที่ตรงกับปัญหาของคุณพร้อมกับผลลัพธ์ได้หรือไม่
Brian Campbell

คำตอบ:


55

ฉันคิดว่า curl กำลังอ่านที่อยู่พร็อกซีจากตัวแปรสภาพแวดล้อมhttp_proxyและตัวแปรควรคงค่าไว้ จากนั้นในเปลือกเช่นทุบตีexport http_proxy='';ก่อนที่คำสั่ง (หรือในเชลล์สคริปต์) จะเปลี่ยนค่าชั่วคราว

(ดูคู่มือของ curl สำหรับตัวแปรทั้งหมดที่ดูภายใต้ENVIRONMENTหัวข้อ)


19
หรือเพียงแค่unset http_proxy
joelittlejohn

หมายเหตุหนึ่ง: มีตัวแปร * _proxy env อื่น ๆ เช่นftp_proxy. ผมคิดว่านี่คือรายการwiki.archlinux.org/index.php/proxy_settings
Dmitriusan

หากคุณไม่ต้องการแทนที่ http_proxy เป็นกรณี ๆ ไปคุณสามารถกำหนดค่าโดเมนให้ละเว้นด้วย $ no_proxy จากนั้นตั้งชื่อแทน curl ของคุณ: alias curl = 'curl --noproxy $ no_proxy'
Sir4ur0n

1
@jdebon ไม่ได้ผลหากคุณมีสัญลักษณ์แทนในตัวแปรสภาพแวดล้อมนั้นด้วยเหตุผลที่อธิบายไว้ด้านล่าง ( stackoverflow.com/a/17710829/2189128 )
เจฟฟ์

@ เจฟฟ์ไม่ใช่กรณีของฉัน แต่เป็นจุดที่ดีอาจทำให้เกิดปัญหากับคนอื่นได้ ขอบคุณ!
Sir4ur0n

250

หากคุณcurlเป็นเวอร์ชันอย่างน้อย7.19.4คุณสามารถใช้--noproxyแฟล็ก

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

จากคู่มือ .


5
curl: option --noproxy: ไม่ทราบ
Roger Ng

2
@RogerNg หากคู่มือหรือการใช้งานมีการเปลี่ยนแปลงตั้งแต่ฉันตอบคำถามอย่าลังเลที่จะอัปเดตคำตอบหรือเขียนของคุณเอง อย่างไรก็ตามในขณะที่เขียนคำตอบนี้ถูกต้องสำหรับคำถามที่ถาม หากการติดตั้งของคุณไม่ทำงานตามข้อกำหนดนั่นเป็นอีกปัญหาหนึ่งโดยสิ้นเชิง
Scott Offen

3
curl --noproxy stackoverflow.com stackoverflow.com นี่คือการยกย่องที่ถูกต้อง
arulraj.net

2
ฉันคิดว่า--noproxyตัวเลือกนั้นไม่สามารถใช้ได้กับ curl รุ่นเก่า (เช่นที่ใช้ที่ Centos / RHEL 5.x)
Dmitriusan

2
จากเอกสารประกอบวิธีเดียวที่สามารถใช้ได้--noproxy 127.0.0.1คือถ้า stackoverflow.com ทำงานบน localhost
dannysauer

72

ฉันพบปัญหาเดียวกันเนื่องจากฉันตั้งค่าตัวแปรสภาพแวดล้อม http_proxy และ https_proxy แต่ในบางครั้งฉันเชื่อมต่อกับเครือข่ายอื่นและจำเป็นต้องข้ามพร็อกซีชั่วคราว วิธีที่ง่ายที่สุดในการดำเนินการนี้ (โดยไม่ต้องเปลี่ยนตัวแปรสภาพแวดล้อม) คือ:

curl --noproxy '*' stackoverflow.com

จากคู่มือ: "อักขระตัวแทนเพียงตัวเดียวคืออักขระ * ตัวเดียวซึ่งตรงกับโฮสต์ทั้งหมดและปิดใช้งานพร็อกซีอย่างมีประสิทธิภาพ"

อักขระ * ถูกยกมาเพื่อไม่ให้ขยายโดยเชลล์อย่างผิดพลาด


12
หมายเหตุสำหรับผู้ใช้ที่โกรธ: Bash จะขยายไฟล์ในเครื่องถ้าฉันไม่พูดถึง * ดังนั้นcurl --noproxy "*" stackoverflow.com
Adam

มีประโยชน์มากและน่าสังเกตว่าสิ่งนี้ดูเหมือนจะละเลยพร็อกซี (SOCKS) ที่ฉันตั้งไว้ในไฟล์. curlrc ของฉัน
MatzFan

1
นี่คือคำตอบที่ได้ผลสำหรับฉันโดยใช้ curl เวอร์ชัน 7.22.0
xpereta


12

เพิ่มการตั้งค่าพร็อกซีของคุณใน. curlrc

proxy = 1.2.3.4
noproxy = .dev,localhost,127.0.0.1

สิ่งนี้ทำให้โดเมน dev และคำขอเครื่องภายในทั้งหมดละเว้นพร็อกซี


1
// นี้เป็นเพียงหนึ่งที่แสดงให้เห็นตัวอย่างที่มีค่าที่มีค่า DNS .ที่เริ่มต้นด้วยการ
Nathan Basanese

เพื่อไม่ให้สับสนกับตัวแปร env no_proxy (มีขีดล่าง)
Simon Perepelitsa

7

ยิงยาว แต่ลองตั้งค่าพร็อกซีเป็น "" (สตริงว่าง) ที่ควรลบล้างการตั้งค่าพร็อกซีใด ๆ ตาม man page


2
ไม่ใช่ "ยิงไกล" แต่เป็นวิธีที่เหมาะสมที่จะทำ ตามหน้า man curl ของฉัน (7.15.5 ซึ่งไม่แสดงตัวเลือก '--noproxy'), -x / - proxy <proxyhost [: port]> ... ตัวเลือกนี้จะแทนที่ตัวแปรสภาพแวดล้อมที่มีอยู่ซึ่งตั้งค่าพร็อกซีเป็น ใช้. หากมีตัวแปรสภาพแวดล้อมตั้งค่าพร็อกซีคุณสามารถตั้งค่าพร็อกซีเป็น "" เพื่อลบล้างได้
Rob Cranfill

5
ในปี '09 ทุกอย่างเป็นไปอย่างยาวนาน
หลุยส์

5
+1, -x "" เลย --noproxy พร้อมสัญลักษณ์แทนใช้ไม่ได้กับ bash ของฉันแม้ว่าฉันจะพูด "*"
Eugene

@ ยูจีน: มันทำงานใน bash 4.3.11 และจะต้องยกมา
karatedog

7

คุณควรใช้$no_proxyตัวแปร env (ตัวพิมพ์เล็ก) โปรดดูตัวอย่างhttps://wiki.archlinux.org/index.php/proxy_settings

นอกจากนี้ยังมีข้อผิดพลาดที่ curl เมื่อนานมาแล้วhttp://sourceforge.net/p/curl/bugs/185/บางทีคุณอาจใช้เวอร์ชัน curl โบราณที่มีข้อบกพร่องนี้


6

ขั้นแรกฉันแสดงรายการการตั้งค่าพร็อกซีปัจจุบันด้วย

env | sort | less

(น่าจะประมาณนี้http_proxy=http://wpad.local.machine.location:port number)

จากนั้นฉันลองตั้งค่า

export http_proxy=";" 

ซึ่งให้ข้อความแสดงข้อผิดพลาดนี้:

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

พยายามแล้ว

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

และมันได้ผล!

ปล! อย่าลืมตั้งค่า http-proxy กลับเป็นการตั้งค่าเดิมด้วย

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

6

ฉันมีhttp_proxyและhttps_proxyถูกกำหนด ฉันไม่ต้องการยกเลิกการตั้งค่าและตั้งค่าสภาพแวดล้อมเหล่านั้นอีกครั้งแต่ --noproxy '*'ทำงานได้ดีสำหรับฉัน

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

คำตอบง่อย แต่: อย่าลืมตรวจสอบให้แน่ใจว่าไม่มีการตั้งค่าพร็อกซีใน~/.curlrcไฟล์ (... )


1
ขอบคุณ. ฉันเคยเกาหัวว่าทำไม curl ถึงไม่เคารพ env vars ในพื้นที่ จากนั้นฉันก็ค้นหา. curlrc และมีการกำหนดค่าเพิ่มเติมบางอย่าง เพิ่ม no_proxy ที่นั่นและใช้งานได้!
n3o

1

ในกรณีของฉัน (macos, curl 7.54.0) ฉันตั้งค่าพร็อกซีด้านล่างด้วย~/.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

ด้วยเหตุผลที่ไม่รู้จักรุ่นนี้curlไม่สามารถทำงานร่วมกับตัวแปรสภาพแวดล้อมNO_PRXYและno_proxyถูกต้องแล้วผมล้างค่าตัวแปรสภาพแวดล้อมพร็อกซี่หนึ่งโดยหนึ่งจนกว่าทั้งสองและHTTPS_PROXYhttps_proxy

unset HTTPS_PROXY
unset https_proxy

มันเริ่มทำงานและสามารถเชื่อมต่อกับ URL ภายในได้

ดังนั้นฉันขอแนะนำให้ยกเลิกการตั้งค่าตัวแปรพร็อกซีทั้งหมดหากคุณมีในสภาพแวดล้อมของคุณเป็นโซลูชันชั่วคราว

unset http_proxy https_proxy HTTP_PROXY HTTPS_PROXY

-1

curl ของฉันไม่ได้เพิกเฉยต่อพร็อกซีบน Ubuntu 12.04 จนกว่าฉันจะตั้งค่าตัวแปรสภาพแวดล้อม "no_proxy" (ตัวพิมพ์เล็ก) ตัวเลือก --noproxy ไม่พร้อมใช้งาน

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.