chrome.proxy

คำอธิบาย

ใช้ chrome.proxy API เพื่อจัดการการตั้งค่าพร็อกซีของ Chrome API นี้อาศัยต้นแบบ ChromeSetting ของ API ประเภท เพื่อรับและตั้งค่าการกำหนดค่าพร็อกซี

สิทธิ์

proxy

ไฟล์ Manifest

คุณต้องประกาศสิทธิ์ "proxy" ใน ไฟล์ Manifest ของส่วนขยาย เพื่อใช้ API การตั้งค่าพร็อกซี เช่น

{
  "name": "My extension",
  ...
  "permissions": [
    "proxy"
  ],
  ...
}

ออบเจ็กต์และพร็อพเพอร์ตี้

การตั้งค่าพร็อกซีจะกำหนดไว้ในออบเจ็กต์ proxy.ProxyConfig การตั้งค่าอาจมี proxy.ProxyRules หรือ proxy.PacScript ทั้งนี้ขึ้นอยู่กับการตั้งค่าพร็อกซีของ Chrome

โหมดพร็อกซี

แอตทริบิวต์ mode ของออบเจ็กต์ ProxyConfig จะกำหนดลักษณะการทำงานโดยรวมของ Chrome เกี่ยวกับการใช้พร็อกซี โดยสามารถมีค่าต่อไปนี้

direct
ในโหมด direct ระบบจะสร้างการเชื่อมต่อทั้งหมดโดยตรงโดยไม่มีพร็อกซี โหมดนี้ไม่อนุญาตให้ใช้พารามิเตอร์เพิ่มเติมในออบเจ็กต์ ProxyConfig
auto_detect
ในโหมด auto_detect การกำหนดค่าพร็อกซีจะกำหนดโดยสคริปต์ PAC ที่ดาวน์โหลดได้ ที่ http://wpad/wpad.dat โหมดนี้ไม่อนุญาตให้ใช้พารามิเตอร์เพิ่มเติมในออบเจ็กต์ ProxyConfig
pac_script
ในโหมด pac_script การกำหนดค่าพร็อกซีจะกำหนดโดยสคริปต์ PAC ที่ดึงมาจาก URL ที่ระบุในออบเจ็กต์ proxy.PacScript หรือนำมาจากองค์ประกอบ data ที่ระบุในออบเจ็กต์ proxy.PacScript โดยตรง นอกจากนี้ โหมดนี้ไม่อนุญาตให้ใช้พารามิเตอร์เพิ่มเติมในออบเจ็กต์ ProxyConfig
fixed_servers
ในโหมด fixed_servers การกำหนดค่าพร็อกซีจะมีการเข้ารหัสในออบเจ็กต์ proxy.ProxyRules โดยอธิบายโครงสร้างไว้ในกฎพร็อกซี นอกจากนี้ โหมด fixed_servers ไม่อนุญาตให้ใช้พารามิเตอร์เพิ่มเติม ในออบเจ็กต์ ProxyConfig
system
ในโหมด system การกำหนดค่าพร็อกซีจะนำมาจากระบบปฏิบัติการ โหมดนี้ไม่อนุญาตให้ใช้พารามิเตอร์เพิ่มเติมในออบเจ็กต์ ProxyConfig โปรดทราบว่าโหมด system แตกต่างจากการไม่ตั้งค่าการกำหนดค่าพร็อกซี ในกรณีหลัง Chrome จะกลับไปใช้การตั้งค่าระบบก็ต่อเมื่อไม่มีตัวเลือกบรรทัดคำสั่งที่มีผลต่อการกำหนดค่าพร็อกซี

กฎพร็อกซี

ออบเจ็กต์ proxy.ProxyRules สามารถมีแอตทริบิวต์ singleProxy หรือชุดย่อยของ proxyForHttp, proxyForHttps, proxyForFtp, และ fallbackProxy

ในกรณีแรก การรับส่งข้อมูล HTTP, HTTPS และ FTP จะผ่านพร็อกซีเซิร์ฟเวอร์ที่ระบุ ส่วนการรับส่งข้อมูลอื่นๆ จะส่งโดยตรง ในกรณีหลัง ลักษณะการทำงานจะซับซ้อนกว่าเล็กน้อย กล่าวคือ หากมีการกำหนดค่าพร็อกซีเซิร์ฟเวอร์สำหรับโปรโตคอล HTTP, HTTPS หรือ FTP การรับส่งข้อมูลที่เกี่ยวข้องจะผ่านพร็อกซีเซิร์ฟเวอร์ที่ระบุ หากไม่ได้ระบุพร็อกซีเซิร์ฟเวอร์ดังกล่าวหรือการรับส่งข้อมูลใช้โปรโตคอลอื่นที่ไม่ใช่ HTTP, HTTPS หรือ FTP ระบบจะใช้ fallbackProxy หากไม่ได้ระบุ fallbackProxy การรับส่งข้อมูลจะส่งโดยตรงโดยไม่มีพร็อกซีเซิร์ฟเวอร์

ออบเจ็กต์พร็อกซีเซิร์ฟเวอร์

พร็อกซีเซิร์ฟเวอร์จะกำหนดค่าในออบเจ็กต์ proxy.ProxyServer การเชื่อมต่อกับพร็อกซีเซิร์ฟเวอร์ (กำหนดโดยแอตทริบิวต์ host) จะใช้โปรโตคอลที่กำหนดไว้ในแอตทริบิวต์ scheme หากไม่ได้ระบุ scheme การเชื่อมต่อพร็อกซีจะมีค่าเริ่มต้นเป็น http

หากไม่ได้กำหนด port ไว้ในออบเจ็กต์ proxy.ProxyServer ระบบจะอนุมานพอร์ตจากสคีม พอร์ตเริ่มต้นมีดังนี้

สคีมพอร์ต
http80
https443
socks41080
socks51080

รายการที่ข้าม

คุณสามารถยกเว้นเซิร์ฟเวอร์แต่ละรายการไม่ให้ผ่านพร็อกซีได้ด้วย bypassList รายการนี้อาจมีรายการต่อไปนี้

[SCHEME://]HOST_PATTERN[:PORT]

จับคู่ชื่อโฮสต์ทั้งหมดที่ตรงกับรูปแบบ HOST_PATTERN ระบบจะตีความ "." ที่นำหน้าเป็น "*."

ตัวอย่าง: "foobar.com", "*foobar.com", "*.foobar.com", "*foobar.com:99", "https://x.*.y.com:99"

ลายการจับคู่ไม่ตรงกัน
".foobar.com""www.foobar.com""foobar.com"
"*.foobar.com""www.foobar.com""foobar.com"
"foobar.com""foobar.com""www.foobar.com"
"*foobar.com""foobar.com", "www.foobar.com", "foofoobar.com"
[SCHEME://]IP_LITERAL[:PORT]

จับคู่ URL ที่เป็นค่าคงที่ของที่อยู่ IP ในเชิงแนวคิดแล้ว URL นี้คล้ายกับกรณีแรก แต่มีกรณีพิเศษเพื่อจัดการการกำหนดค่า Canonical ของค่าคงที่ IP เช่น การจับคู่ "[0:0:0::1]" จะเหมือนกับการจับคู่ "[::1]" เนื่องจากระบบจะดำเนินการกำหนดค่า Canonical ของ IPv6 ภายใน

ตัวอย่าง: 127.0.1, [0:0::1], [::1]:80, https://[::1]:443

IP_LITERAL/PREFIX_LENGTH_IN_BITS

จับคู่ URL ใดก็ตามที่มีค่าคงที่ IP (IP_LITERAL) ภายในช่วงที่กำหนด ช่วง IP (PREFIX_LENGTH_IN_BITS) จะระบุโดยใช้ รูปแบบ CIDR

จับคู่ URL ใดก็ตามที่มีค่าคงที่ IP ภายในช่วงที่กำหนด ช่วง IP จะระบุโดยใช้รูปแบบ CIDR ตัวอย่าง: "192.168.1.1/16", "fefe:13::abc/33"

<local>

สตริงตามตัวอักษร <local> ตรงกับชื่อโฮสต์อย่างง่าย ชื่อโฮสต์อย่างง่ายคือชื่อโฮสต์ที่ไม่มีจุดและไม่ใช่ค่าคงที่ IP เช่น example และ localhost เป็นชื่อโฮสต์อย่างง่าย แต่ example.com, example., และ [::1] ไม่ใช่

ตัวอย่าง: "<local>"

ตัวอย่าง

โค้ดต่อไปนี้จะตั้งค่าพร็อกซี SOCKS 5 สำหรับการเชื่อมต่อ HTTP กับเซิร์ฟเวอร์ทั้งหมด ยกเว้น foobar.com และใช้การเชื่อมต่อโดยตรงสำหรับโปรโตคอลอื่นๆ ทั้งหมด การตั้งค่าจะมีผลกับหน้าต่างปกติและหน้าต่างที่ไม่ระบุตัวตน เนื่องจากหน้าต่างที่ไม่ระบุตัวตนจะรับการตั้งค่าจากหน้าต่างปกติ โปรดดูเอกสารประกอบ Types API ด้วย

var config = {
  mode: "fixed_servers",
  rules: {
    proxyForHttp: {
      scheme: "socks5",
      host: "1.2.3.4"
    },
    bypassList: ["foobar.com"]
  }
};
chrome.proxy.settings.set(
  {value: config, scope: 'regular'},
  function() {}
);

โค้ดต่อไปนี้จะตั้งค่าสคริปต์ PAC ที่กำหนดเอง

var config = {
  mode: "pac_script",
  pacScript: {
    data: "function FindProxyForURL(url, host) {\n" +
          "  if (host == 'foobar.com')\n" +
          "    return 'PROXY blackhole:80';\n" +
          "  return 'DIRECT';\n" +
          "}"
  }
};
chrome.proxy.settings.set(
  {value: config, scope: 'regular'},
  function() {}
);

ข้อมูลโค้ดถัดไปจะค้นหาการตั้งค่าพร็อกซีที่มีผลในปัจจุบัน ส่วนขยายอื่นหรือนโยบายอาจกำหนดการตั้งค่าพร็อกซีที่มีผล ดูรายละเอียดได้ที่เอกสารประกอบ Types API

chrome.proxy.settings.get(
  {'incognito': false},
  function(config) {
    console.log(JSON.stringify(config));
  }
);

โปรดทราบว่าออบเจ็กต์ value ที่ส่งไปยัง set() ไม่เหมือนกับออบเจ็กต์ value ที่ส่งไปยังฟังก์ชัน Callback ของ get() โดยออบเจ็กต์หลังจะมีองค์ประกอบ rules.proxyForHttp.port

ประเภท

Mode

Chrome 54 ขึ้นไป

ค่าแจกแจง

"direct"

"auto_detect"

"pac_script"

"fixed_servers"

"system"

PacScript

ออบเจ็กต์ที่เก็บข้อมูลการกำหนดค่าพร็อกซีอัตโนมัติ ควรมีช่องที่ไม่ว่างเปล่าเพียงช่องเดียว

พร็อพเพอร์ตี้

  • data

    สตริง ไม่บังคับ

    สคริปต์ PAC

  • mandatory

    บูลีน ไม่บังคับ

    หากเป็นจริง สคริปต์ PAC ที่ไม่ถูกต้องจะป้องกันไม่ให้สแต็กเครือข่ายกลับไปใช้การเชื่อมต่อโดยตรง ค่าเริ่มต้นคือเท็จ

  • url

    สตริง ไม่บังคับ

    URL ของไฟล์ PAC ที่จะใช้

ProxyConfig

ออบเจ็กต์ที่ห่อหุ้มการกำหนดค่าพร็อกซีที่สมบูรณ์

พร็อพเพอร์ตี้

  • 'direct' = ไม่ใช้พร็อกซี 'auto_detect' = ตรวจหาการตั้งค่าพร็อกซีอัตโนมัติ 'pac_script' = ใช้สคริปต์ PAC ที่ระบุ 'fixed_servers' = ระบุพร็อกซีเซิร์ฟเวอร์ด้วยตนเอง 'system' = ใช้การตั้งค่าพร็อกซีของระบบ

  • pacScript

    PacScript (ไม่บังคับ)

    สคริปต์การกำหนดค่าพร็อกซีอัตโนมัติ (PAC) สำหรับการกำหนดค่านี้ ใช้สำหรับโหมด "pac_script"

  • rules

    ProxyRules (ไม่บังคับ)

    กฎพร็อกซีที่อธิบายการกำหนดค่านี้ ใช้สำหรับโหมด "fixed_servers"

ProxyRules

ออบเจ็กต์ที่ห่อหุ้มชุดกฎพร็อกซีสำหรับโปรโตคอลทั้งหมด ใช้ "singleProxy" หรือ (ชุดย่อยของ) "proxyForHttp", "proxyForHttps", "proxyForFtp" และ "fallbackProxy"

พร็อพเพอร์ตี้

  • bypassList

    สตริง[] ไม่บังคับ

    รายการเซิร์ฟเวอร์ที่จะเชื่อมต่อโดยไม่มีพร็อกซีเซิร์ฟเวอร์

  • fallbackProxy

    ProxyServer (ไม่บังคับ)

    พร็อกซีเซิร์ฟเวอร์ที่จะใช้สำหรับทุกอย่างอื่นหรือหากไม่ได้ระบุพร็อกซีเฉพาะสำหรับ...

  • proxyForFtp

    ProxyServer (ไม่บังคับ)

    พร็อกซีเซิร์ฟเวอร์ที่จะใช้สำหรับคำขอ FTP

  • proxyForHttp

    ProxyServer (ไม่บังคับ)

    พร็อกซีเซิร์ฟเวอร์ที่จะใช้สำหรับคำขอ HTTP

  • proxyForHttps

    ProxyServer (ไม่บังคับ)

    พร็อกซีเซิร์ฟเวอร์ที่จะใช้สำหรับคำขอ HTTPS

  • singleProxy

    ProxyServer (ไม่บังคับ)

    พร็อกซีเซิร์ฟเวอร์ที่จะใช้สำหรับคำขอต่อ URL ทั้งหมด (เช่น http, https และ ftp)

ProxyServer

ออบเจ็กต์ที่ห่อหุ้มข้อกำหนดของพร็อกซีเซิร์ฟเวอร์เดียว

พร็อพเพอร์ตี้

  • host

    สตริง

    ชื่อโฮสต์หรือที่อยู่ IP ของพร็อกซีเซิร์ฟเวอร์ ชื่อโฮสต์ต้องเป็น ASCII (ในรูปแบบ Punycode) ระบบยังไม่รองรับ IDNA

  • port

    ตัวเลข ไม่บังคับ

    พอร์ตของพร็อกซีเซิร์ฟเวอร์ ค่าเริ่มต้นคือพอร์ตที่ขึ้นอยู่กับสคีม

  • scheme

    สคีม (ไม่บังคับ)

    สคีม (โปรโตคอล) ของพร็อกซีเซิร์ฟเวอร์เอง ค่าเริ่มต้นคือ "http"

Scheme

Chrome 54 ขึ้นไป

ค่าแจกแจง

"http"

"https"

"quic"

"socks4"

"socks5"

พร็อพเพอร์ตี้

settings

การตั้งค่าพร็อกซีที่จะใช้ ค่าของการตั้งค่านี้คือออบเจ็กต์ ProxyConfig

ประเภท

กิจกรรม

onProxyError

chrome.proxy.onProxyError.addListener(
  callback: function,
)

แจ้งข้อผิดพลาดเกี่ยวกับพร็อกซี

พารามิเตอร์

  • callback

    ฟังก์ชัน

    พารามิเตอร์ callback มีลักษณะดังนี้:

    (details: object) => void

    • details

      ออบเจ็กต์

      • details

        สตริง

        รายละเอียดเพิ่มเติมเกี่ยวกับข้อผิดพลาด เช่น ข้อผิดพลาดรันไทม์ JavaScript

      • error

        สตริง

        คำอธิบายข้อผิดพลาด

      • fatal

        บูลีน

        หากเป็นจริง ข้อผิดพลาดร้ายแรงและระบบยกเลิกธุรกรรมเครือข่าย มิฉะนั้น ระบบจะใช้การเชื่อมต่อโดยตรงแทน