ฉันจะทำให้ curl ไม่สนใจพร็อกซีได้อย่างไร การตั้งค่า $ NO_PROXY ดูเหมือนจะไม่ได้ผลสำหรับฉัน
ฉันจะทำให้ curl ไม่สนใจพร็อกซีได้อย่างไร การตั้งค่า $ NO_PROXY ดูเหมือนจะไม่ได้ผลสำหรับฉัน
คำตอบ:
ฉันคิดว่า curl กำลังอ่านที่อยู่พร็อกซีจากตัวแปรสภาพแวดล้อมhttp_proxy
และตัวแปรควรคงค่าไว้ จากนั้นในเปลือกเช่นทุบตีexport http_proxy='';
ก่อนที่คำสั่ง (หรือในเชลล์สคริปต์) จะเปลี่ยนค่าชั่วคราว
(ดูคู่มือของ curl สำหรับตัวแปรทั้งหมดที่ดูภายใต้ENVIRONMENT
หัวข้อ)
unset http_proxy
ftp_proxy
. ผมคิดว่านี่คือรายการwiki.archlinux.org/index.php/proxy_settings
--noproxy
ตัวเลือกนั้นไม่สามารถใช้ได้กับ curl รุ่นเก่า (เช่นที่ใช้ที่ Centos / RHEL 5.x)
--noproxy 127.0.0.1
คือถ้า stackoverflow.com ทำงานบน localhost
ฉันพบปัญหาเดียวกันเนื่องจากฉันตั้งค่าตัวแปรสภาพแวดล้อม http_proxy และ https_proxy แต่ในบางครั้งฉันเชื่อมต่อกับเครือข่ายอื่นและจำเป็นต้องข้ามพร็อกซีชั่วคราว วิธีที่ง่ายที่สุดในการดำเนินการนี้ (โดยไม่ต้องเปลี่ยนตัวแปรสภาพแวดล้อม) คือ:
curl --noproxy '*' stackoverflow.com
จากคู่มือ: "อักขระตัวแทนเพียงตัวเดียวคืออักขระ * ตัวเดียวซึ่งตรงกับโฮสต์ทั้งหมดและปิดใช้งานพร็อกซีอย่างมีประสิทธิภาพ"
อักขระ * ถูกยกมาเพื่อไม่ให้ขยายโดยเชลล์อย่างผิดพลาด
curl --noproxy "*" stackoverflow.com
ใช้งานได้ดีตั้งค่าสตริงพร็อกซีเป็น ""
curl -x "" http://www.stackoverflow.com
เพิ่มการตั้งค่าพร็อกซีของคุณใน. curlrc
proxy = 1.2.3.4
noproxy = .dev,localhost,127.0.0.1
สิ่งนี้ทำให้โดเมน dev และคำขอเครื่องภายในทั้งหมดละเว้นพร็อกซี
.
ที่เริ่มต้นด้วยการ
ยิงยาว แต่ลองตั้งค่าพร็อกซีเป็น "" (สตริงว่าง) ที่ควรลบล้างการตั้งค่าพร็อกซีใด ๆ ตาม man page
คุณควรใช้$no_proxy
ตัวแปร env (ตัวพิมพ์เล็ก) โปรดดูตัวอย่างhttps://wiki.archlinux.org/index.php/proxy_settings
นอกจากนี้ยังมีข้อผิดพลาดที่ curl เมื่อนานมาแล้วhttp://sourceforge.net/p/curl/bugs/185/บางทีคุณอาจใช้เวอร์ชัน curl โบราณที่มีข้อบกพร่องนี้
ขั้นแรกฉันแสดงรายการการตั้งค่าพร็อกซีปัจจุบันด้วย
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
ฉันมี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"
}
คำตอบง่อย แต่: อย่าลืมตรวจสอบให้แน่ใจว่าไม่มีการตั้งค่าพร็อกซีใน~/.curlrc
ไฟล์ (... )
ในกรณีของฉัน (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_PROXY
https_proxy
unset HTTPS_PROXY
unset https_proxy
มันเริ่มทำงานและสามารถเชื่อมต่อกับ URL ภายในได้
ดังนั้นฉันขอแนะนำให้ยกเลิกการตั้งค่าตัวแปรพร็อกซีทั้งหมดหากคุณมีในสภาพแวดล้อมของคุณเป็นโซลูชันชั่วคราว
unset http_proxy https_proxy HTTP_PROXY HTTPS_PROXY
curl ของฉันไม่ได้เพิกเฉยต่อพร็อกซีบน Ubuntu 12.04 จนกว่าฉันจะตั้งค่าตัวแปรสภาพแวดล้อม "no_proxy" (ตัวพิมพ์เล็ก) ตัวเลือก --noproxy ไม่พร้อมใช้งาน