ดำเนินการคำขอ HTTP ด้วย cURL (โดยใช้ PROXY)


451

ฉันมีที่อยู่พร็อกซีนี้: 125.119.175.48:8909

ฉันจะดำเนินการตามคำขอ HTTP โดยใช้ cURL เช่นเดียวกับcurl http://www.example.comแต่ระบุที่อยู่พร็อกซีของเครือข่ายของฉันได้อย่างไร

คำตอบ:


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 pageตัวแปรสภาวะแวดล้อมสามารถระบุเป็นตัวพิมพ์เล็กหรือตัวพิมพ์ใหญ่ เวอร์ชันตัวพิมพ์เล็กมีความสำคัญกว่า http_proxy เป็นข้อยกเว้นเนื่องจากมีให้ใช้เป็นตัวพิมพ์เล็กเท่านั้น การใช้ตัวแปรสภาพแวดล้อมเพื่อตั้งค่าพร็อกซีมีผลเช่นเดียวกับการใช้ตัวเลือก --proxy
กัปตัน Lepton

@BipinVayalu คุณต้องการตรวจสอบอะไร ด้วยวิธีนี้สิ่งที่ฉันอธิบายข้างต้นลูกค้าใช้ proxy "ทางตรง" ไม่โปร่งใส ดังนั้นพร็อกซีให้คำตอบ HTTP มาตรฐาน (รวมถึงรหัส HTTP) หากคุณส่งออกตัวแปรสภาพแวดล้อม http_proxy ที่ไม่ถูกต้อง (เช่นพอร์ตที่ไม่ดี ... ) ไคลเอ็นต์ไม่สามารถเชื่อมต่อได้และจะให้ข้อความแสดงข้อผิดพลาด: "คำเตือน! ไม่สามารถเชื่อมต่อกับโฮสต์ระยะไกล!" หรือสิ่งอื่นที่คล้ายคลึงกัน - ลองเลย :)
airween

15
หากคุณตรวจสอบซอร์สโค้ดของ curl คุณจะเห็น url.c (บรรทัดที่ 4337 ใน verion 7.39) พวกเขาตรวจสอบเวอร์ชั่นที่เป็นตัวพิมพ์เล็กและหากพวกเขาไม่พบมันให้ตรวจสอบตัวพิมพ์ใหญ่
Raistmaj

1
ผู้ใช้ส่วนใหญ่ส่งการแก้ไขมาให้ฉันตอนนี้ฉันแบ่งปันสิ่งนั้น หากคุณต้องการใช้การเชื่อมต่อ HTTPS ผ่านพร็อกซีคุณควรทำสิ่งนี้: ส่งออก https_proxy = your.proxy.server: พอร์ต หมายเหตุว่ามีโปรโต "URL" ในสกีมา URL ไม่ใช่ httpS!
ออกอากาศ

663

จาก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" หมายความว่าสามารถใช้อย่างใดอย่างหนึ่ง คำสั่งควรเป็น "curl -x 122.72.2.200:80 mysite.com/test.php?id=1 " หรือ "curl --proxy 122.72.2.200:80 mysite.com/test.php?id=1 "
IBBoard

8
เอกสารจะถูกยกมาอย่างถูกต้องตามที่อธิบายไว้ข้างต้นอย่างไรก็ตามผู้ใช้และรหัสผ่านควรแสดงต่างกัน:-x user:password@proxyhost:port
เอ็ดชาเปล

ขอบคุณสำหรับคำตอบที่ดีที่สุด!
haotang

128

วิธีแก้ปัญหาข้างต้นอาจไม่สามารถใช้กับเวอร์ชั่น curl บางอันที่ฉันลองด้วยตัวเอง (curl 7.22.0) แต่สิ่งที่ใช้ได้ผลสำหรับฉันคือ:

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

หวังว่ามันจะแก้ปัญหาได้ดีกว่า!


พบกับปัญหาเดียวกัน curl ที่จัดส่งโดย Debian Wheezy ยังไม่สนับสนุนเคล็ดลับ env
hyperknot

มีสิ่งนี้แทน[1] 4812
Aminah Nuraini

80

ระวังว่าถ้าคุณใช้พร็อกซี SOCKS แทนพร็อกซี HTTP / HTTPS คุณจะต้องใช้--socks5สวิตช์แทน:

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

คุณสามารถใช้--socks5-hostnameแทน--socks5การแก้ไข DNS ที่ด้านพร็อกซี


6
สิ่งนี้ไม่ได้ผลสำหรับฉัน แต่การใช้งาน--socks5-hostnameทำได้
Michał Rybak

2
@ MichałRybakที่จะทำงานเหมือนเดิม แต่แก้ไข DNS ที่ด้านพร็อกซี ดูหน้าคนสำหรับรายละเอียดเพิ่มเติม
Filipe Correia

3
curl https://api.ipify.org --proxy socks5://189.100.246.182:37339ดูเหมือนว่าจะทำงานได้ดีสำหรับฉัน เป็นทาง--proxyเลือกที่ด้อยกว่า--socks5เมื่อใช้ถุงเท้าพร็อกซี่ 5 หรือไม่?

@ user993683 มันขึ้นอยู่กับรุ่น --proxyอาจเป็นสิ่งที่คุณต้องการในตอนนี้ แต่ก็ไม่ได้รับการสนับสนุนเสมอ โปรดทราบว่าsocks5://และsocks5h://ดำเนินการแก้ปัญหาชื่อโฮสต์ (DNS) ก่อนและหลังการเชื่อมต่อกับพร็อกซีตามลำดับ
ไมเคิล - Clay Shirky อยู่ที่ไหน

51

ในฐานะที่เป็น adition เพื่อ 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 โหมด verbose มันจะให้รายละเอียดเพิ่มเติมรวมถึงส่วนหัวและการตอบสนอง


2
นี่ควรเป็นคำตอบ ไม่ใช่ทุกคนที่ต้องการระบุตัวแปรส่วนกลาง (ส่งออก) สำหรับทุกคำขอ HTTP ที่ดำเนินการโดยไคลเอนต์ HTTP ทุกตัวในโฮสต์ของคุณ ตัวเลือกนี้ให้ความยืดหยุ่นมากขึ้น IMHO
ivanleoncz

สิ่งนี้มีประโยชน์มากเมื่อคุณลองใช้พรอกซีที่แตกต่างกับ URL ขอบคุณ
redAce

30

คุณสามารถใช้ได้ :

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

ตามที่อธิบายโดยคาร์ล


26
"ดังที่คาร์ลอธิบาย" ซึ่งหมายความว่าคำตอบนี้ไม่ได้ดีไปกว่าสำเนาของคำตอบนั้น
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 ไม่ทำงานอีกต่อไปตอนนี้การเปลี่ยนแปลงพร็อกซีและ env vars ถูกตั้งค่าทั้งหมดแล้ว ขอบคุณสำหรับสิ่งนั้น!
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 ไม่ใช้ / catch http [s] _proxyตัวแปรสภาพแวดล้อม



3

คุณไม่จำเป็นต้องส่งออกhttp[s]_proxyตัวแปรเชลล์หากคุณเพิ่งตั้งค่าพร็อกซีสำหรับคำสั่งหนึ่งคำสั่ง เช่น

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

ที่กล่าวว่าฉันต้องการcurl -xถ้าฉันรู้ว่าฉันมักจะใช้พร็อกซี่


2

คุณอาจต้องระบุ-kหรือ--insecureตัวเลือกสำหรับการม้วนเพื่อรับปัญหาที่อาจเกิดขึ้นกับใบรับรอง 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

สิ่งนี้ทำงานได้อย่างสมบูรณ์แบบสำหรับฉันข้อผิดพลาดเกิดขึ้นเนื่องจาก curl จำเป็นต้องตั้งค่าพรอกซี

Remmember แทนที่พร็อกซี่ที่มีพร็อกซีเหมือง "ตัวอย่างเช่น" เป็น http://10.1.1.50:8080/


0

ในกรณีที่พรอกซีใช้พร็อกซีอัตโนมัติกับไฟล์ PAC เราสามารถค้นหาพร็อกซีที่แท้จริงจากจาวาสคริปต์จาก PAC URL

และหากพร็อกซีต้องการการรับรองความถูกต้องก่อนอื่นเราสามารถใช้เว็บเบราว์เซอร์ปกติเพื่อเข้าถึงเว็บไซต์ซึ่งจะส่งเสริมการโต้ตอบการตรวจสอบสิทธิ์ หลังจากการรับรองความถูกต้องเราสามารถใช้ wireshark เพื่อจับภาพแพคเกจ http ส่งไปยังพร็อกซีเซิร์ฟเวอร์จากแพ็คเกจ http เราสามารถรับโทเค็นรับรองความถูกต้องจากส่วนหัว http: การอนุญาต

จากนั้นเราสามารถตั้งค่าตัวแปรสภาพแวดล้อม http_proxy และรวมโทเค็นการตรวจสอบความถูกต้องในส่วนหัว http: การอนุญาตพร็อกซี

ส่งออก http_proxy = http: // proxyserver: พอร์ต

curl -H "การอนุญาตพร็อกซี: xxxx" http: // targetURL

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