เป็นเรื่องปกติที่เน็ตใน office ใหญ่ๆ มันจะอยู่หลัง proxy ที่จะกรองข้อมูลเข้าออก แต่แปลกคือเปิดเว็บใน chrome firefox IE ได้หมด แต่ตัว command line dos ตัวน้อยๆ น่ารัก ที่ติดมากับ windows มีปัญหาไม่สามารถติดตั้ง package ต่างๆ ผ่าน composer หรือ npm ได้

เพราะว่าสำนักงานอาจจะใช้ NTLM หรือ Kerberos มาทำเป็น proxy โดยไม่ได้สนใจว่า dos, command line แม้แต่น้องใหม่ powershell อะไรพวกนี้มันต่อเน็ตไม่ได้ 100% ทั้ง ๆ ที่ ping ออกไปได้ เอา url ไปเปิดดูก็ได้ แต่ทั้ง composer ทั้ง npm มันบอกว่าต่อเน็ตไม่ได้ network เค้าก็บอกไม่ได้บล๊อกนะ ทำไม่เป็นแบบนี้ไม่รู้เหมือนกัน

วิธีแก้คือหาโปรแกรม authentication proxy, forward proxy, reverse Proxy มาช่วย เดิมเคยใช้ Cntlm Authentication Proxy โดนเคยเขียน forward proxy ด้วย cntlm ไว้แต่พี่แกแทบจะไม่พัฒนาต่อแล้ว เลยเปลี่ยนมาใช้ Px แทน

การติดตั้ง

  1. สร้าง folder ไว้เก็บโปรแกรม เช่น C:\px
  2. โหลดมาจากหน้า https://github.com/genotrance/px/releases/tag/vHEAD จะมีตัวที่เป็น .exe ให้โหลดมาเก็บไว้ที่ C:\px
  3. เปิด command line แล้ว
    1. cd c:/
    2. cd c:\px
    3. ถ้า proxy ของ office คือ 192.168.1.33 port 3128 ก็พิมพ์
      px –192.168.1.33:3128 –save
    4. px –install
  4. เปิดไฟล์ C:\px\px.ini ตามคู่มือ Configuration ออกมาแก้ เช่น
[proxy]
allow = *.*.*.*
auth = 
gateway = 0
hostonly = 0
listen = 127.0.0.1
noproxy = 192.168.1.*
pac = 
port = 3129
server = 192.168.1.33:3128
useragent = 
username = 

[settings]
foreground = 0
idle = 30
log = 0
proxyreload = 60
socktimeout = 20.0
threads = 5
workers = 8

แก้ windows environment สมมุติว่า 3128 คือ port ที่ตั้งไว้ใน [proxy] จะได้

VariableValue
HTTP_PORXYlocalhost:3129
HTTP_PROXY_REQUEST_FULLURI0
HTTPS_PROXYlocalhost:3129
HTTPS_PROXY_REQUEST_FULLURI0

ถ้าไม่เคยตั้งค่า Windows Environment Variables อ่านได้จาก

เปิดไฟล์ C:\Windows\System32\drivers\etc\hosts
แก้จาก

# localhost name resolution is handled within DNS itself.
#	127.0.0.1       localhost
#	::1             localhost

เป็น

# localhost name resolution is handled within DNS itself.
	127.0.0.1       localhost
	::1             localhost

restart แล้วลง composer และ npm ใหม่ ตัวติดตั้งเห็นเห็น Windows Environment Variables แล้วตั้งค่า proxy ให้เอง