หากต้องการขยายคำตอบ @Steve Roberts
ชื่อผู้ใช้ของฉันอยู่ในรูปแบบ "domain \ ชื่อผู้ใช้" - รวมถึงเครื่องหมายสแลชในการกำหนดค่าพร็อกซีส่งผลให้สแลชปรากฏขึ้น ดังนั้นเข้ามานี้:
npm config set proxy "http://domain\username:password@servername:port/"
ฉันต้อง URL เข้ารหัสdomain\user
สตริงของฉันอย่างไรก็ตามฉันมีช่องว่างในชื่อผู้ใช้ของฉันดังนั้นฉันจึงใส่+
รหัสเพื่อเข้ารหัสช่องว่าง URL แต่มันจะได้รับการเข้ารหัสสองเท่าเป็น%2B
(ซึ่งเป็นการเข้ารหัส URL สำหรับเครื่องหมายบวก แต่ URL การเข้ารหัสสำหรับพื้นที่คือ%20
) ดังนั้นฉันต้องทำดังต่อไปนี้แทน:
คำสั่ง npm
// option one
// it works for some packages
npm config set http_proxy "http://DOMAIN%5Cuser+name:password@x.x.x.x:port"
npm config set proxy "http://DOMAIN%5Cuser+name:password@x.x.x.x:port"
// option two
// it works best for me
// please notice that I actually used a space
// instead of URL encode it with '+', '%20 ' OR %2B (plus url encoded)
npm config set http_proxy "http://DOMAIN%5Cuser name:password@x.x.x.x:port"
npm config set proxy "http://DOMAIN%5Cuser name:password@x.x.x.x:port"
// option two (B) as of 2019-06-01
// no DOMAIN
// instead of URL encode it with '+', '%20 ' OR %2B (plus url encoded)
npm config set http_proxy "http://user name:password@x.x.x.x:port"
npm config set proxy "http://user name:password@x.x.x.x:port"
การแก้ไขปัญหาการกำหนดค่า npm
ฉันใช้npm config list
เพื่อรับค่าการแยกวิเคราะห์ที่ฉันตั้งไว้ข้างต้นและนั่นคือวิธีที่ฉันค้นพบเกี่ยวกับการเข้ารหัสสองครั้ง แปลก.
เป็นหลักคุณต้องเข้าใจข้อกำหนดต่อไปนี้:
- เป็น
DOMAIN
สตริงที่จำเป็นสำหรับการตรวจสอบ
- คุณต้องการเข้ารหัสอักขระพิเศษหรือไม่
- ช่องว่างและที่ (@) สัญญาณมีความท้าทายเป็นพิเศษ
ความนับถือ.
ตัวแปรสภาพแวดล้อมของ Windows (พร้อมรับคำ CMD)
ปรับปรุง
ปรากฎว่าแม้จะมีการกำหนดค่าข้างต้นฉันยังคงมีปัญหาบางอย่างกับแพ็คเกจ / สคริปต์ที่ใช้Request - ไคลเอ็นต์ HTTP แบบง่ายภายในเพื่อดาวน์โหลดเนื้อหา ดังนั้นตามที่ readme อธิบายไว้ข้างต้นเราสามารถระบุตัวแปรสภาพแวดล้อมได้เพื่อตั้งค่าพร็อกซีในบรรทัดคำสั่งและคำขอจะให้เกียรติค่าเหล่านั้น
จากนั้นหลังจาก(และฉันลังเลที่จะยอมรับสิ่งนี้)พยายามหลายครั้ง (มากกว่าวัน) การพยายามตั้งค่าตัวแปรสภาพแวดล้อมในที่สุดฉันก็ทำตามแนวทางต่อไปนี้ได้สำเร็จ:
rem notice that the value after the = has no quotations
rem - I believe that if quotations are placed after it, they become
rem part of the value, you do not want that
rem notice that there is no space before or after the = sign
rem - if you leave a space before it, you will be declaring a variable
rem name that includes such space, you do not want to do that
rem - if you leave a space after it, you will be including the space
rem as part of the value, you do not want that either
rem looks like there is no need to URL encode stuff in there
SET HTTP_PROXY=http://DOMAIN\user name:password@x.x.x.x:port
SET HTTPS_PROXY=http://DOMAIN\user name:password@x.x.x.x:port
cntlm
ฉันใช้เทคนิคด้านบนเป็นเวลาสองสามสัปดาห์จนกระทั่งฉันตระหนักถึงค่าใช้จ่ายในการอัปเดตรหัสผ่านของฉันในเครื่องมือทั้งหมดที่จำเป็นต้องมีการตั้งค่าพร็อกซี
นอกจากนี้ฉันยังใช้:
- ซุ้มไม้ในสวน
- คนจรจัด
- กล่องเสมือน (ใช้ linux)
- apt-get [linux]
- คอมไพล์
- vscode
- วงเล็บ
- อะตอม
- ศูนย์รับฝากหลักทรัพย์
ขั้นตอนการติดตั้ง cntlm
ดังนั้นผมติดตั้งcntlm การตั้งค่าcntlm
เป็นสิ่งที่ค่อนข้างก้าวไปข้างหน้าคุณมองหาไฟล์ ini @C:\Program Files\Cntlm\cntlm.ini
- เปิด
C:\Program Files\Cntlm\cntlm.ini
(คุณอาจต้องการสิทธิ์ผู้ดูแลระบบ)
- มองหา
Username
และDomain
บรรทัด (บรรทัด 8-9 ฉันคิดว่า)
- เพิ่มชื่อผู้ใช้ของคุณ
- เพิ่มโดเมนของคุณ
เมื่อ cmd ให้เรียกใช้:
cd C:\Program Files\Cntlm\
cntlm -M
cntlm -H
cygwin warning:
MS-DOS style path detected: C:\Program Files\Cntlm\cntlm.ini
Preferred POSIX equivalent is: /Cntlm/cntlm.ini
CYGWIN environment variable option "nodosfilewarning" turns off this warning.
Consult the user's guide for more details about POSIX paths:
http://cygwin.com/cygwin-ug-net/using.html#using-pathnames
Password:
ผลลัพธ์ที่คุณได้รับcntlm -H
จะมีลักษณะดังนี้:
PassLM 561DF6AF15D5A5ADG
PassNT A1D651A5F15DFA5AD
PassNTLMv2 A1D65F1A65D1ASD51 # Only for user 'user name', domain 'DOMAIN'
- ขอแนะนำให้คุณใช้ PassNTLMv2 เพื่อเพิ่ม
#
บรรทัดก่อนหน้าPassLM
และPassNT
หรือไม่ใช้
- วางเอาต์พุตจาก
cntlm -H
บนไฟล์ ini เพื่อแทนที่บรรทัดสำหรับPassLM
, PassNT
และPassNTMLv2
, หรือคอมเม้นต์บรรทัดต้นฉบับและเพิ่มของคุณ
- เพิ่ม
Proxy
เซิร์ฟเวอร์ของคุณ หากคุณไม่ทราบว่าพร็อกซีเซิร์ฟเวอร์คืออะไรทำในสิ่งที่ฉันทำฉันค้นหาไฟล์พร็อกซีกำหนดค่าอัตโนมัติโดยค้นหาAutoConfigURL
คีย์รีจิสทรีในHKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings
คีย์รีจิสทรีในนำทางไปยัง URL นั้นและดูรหัสที่เกิดขึ้นเป็น JavaScript
- ไม่บังคับคุณสามารถเปลี่ยนพอร์ตที่ cntlm ฟังโดยเปลี่ยน
Listen ####
บรรทัดโดยที่####
คือหมายเลขพอร์ต
ตั้งค่า NPM ด้วย cntlm
ดังนั้นคุณชี้ npm ไปที่พร็อกซี cntml ของคุณคุณสามารถใช้ ip ที่ฉันใช้localhost
และพอร์ตเริ่มต้นสำหรับ cntlm 3128
ดังนั้น URL พร็อกซีของฉันจึงมีลักษณะเช่นนี้
http://localhost:3128
ด้วยคำสั่งที่เหมาะสม:
การตั้งค่าพร็อกซี npm config http: // localhost: 3128
ง่ายกว่ามาก คุณตั้งค่าเครื่องมือทั้งหมดของคุณด้วย URL เดียวกันนั้นและคุณอัปเดตรหัสผ่านได้ในที่เดียว ชีวิตนั้นง่ายกว่านี้มาก
ต้องติดตั้งใบรับรอง CA npm
จากเอกสาร npm ca
หากพร็อกซีองค์กรของคุณกำลังขัดขวางการเชื่อมต่อ https กับใบรับรองที่ลงชื่อด้วยตนเองของตนเองนี่เป็นสิ่งที่ต้องหลีกเลี่ยง npm config set strict-ssl false
(ไม่มีใหญ่)
ขั้นตอนพื้นฐาน
- รับใบรับรองจากเบราว์เซอร์ของคุณ (Chromes ทำงานได้ดี) ส่งออกเป็นBase-64 ที่เข้ารหัส X.509 (.CER)
- แทนที่บรรทัดใหม่ด้วย
\n
- แก้ไขการ
.npmrc
เพิ่มบรรทัดของคุณca[]="-----BEGIN CERTIFICATE-----\nXXXX\nXXXX\n-----END CERTIFICATE-----"
ประเด็น
ฉันสังเกตเห็นว่าบางครั้งก็มีการแฮงก์ npm ดังนั้นฉันจึงหยุด (บางครั้งแรง) cntlmแล้วรีสตาร์ท