chrome.proxy

คำอธิบาย

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

สิทธิ์

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 โดยหลักการแล้ว กรณีนี้คล้ายกับกรณีแรก แต่มีกรณีพิเศษในการรับมือกับการกำหนดหน้า 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 ที่ส่งไปยังฟังก์ชันเรียกกลับของ get() องค์ประกอบหลังจะมีองค์ประกอบ rules.proxyForHttp.port

ประเภท

Mode

Chrome 54 ขึ้นไป

ค่าแจกแจง

"auto_detect"

"pac_script"

PacScript

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

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

  • ข้อมูล

    string ไม่บังคับ

    สคริปต์ PAC

  • บังคับ

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

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

  • url

    string ไม่บังคับ

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

ProxyConfig

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

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

  • โหมด

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

  • pacScript

    PacScript ไม่บังคับ

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

  • กฎ

    ProxyRules ไม่บังคับ

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

ProxyRules

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

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

  • bypassList

    string[] ไม่บังคับ

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

  • fallbackProxy

    ProxyServer ไม่บังคับ

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

  • proxyForFtp

    ProxyServer ไม่บังคับ

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

  • proxyForHttp

    ProxyServer ไม่บังคับ

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

  • proxyForHttps

    ProxyServer ไม่บังคับ

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

  • singleProxy

    ProxyServer ไม่บังคับ

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

ProxyServer

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

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

  • ผู้จัด

    string

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

  • พอร์ต

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

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

  • สคีม

    รูปแบบ ไม่บังคับ

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

Scheme

Chrome 54 ขึ้นไป

ค่าแจกแจง

"http"

"https"

"quic"

"ถุงเท้า4"

"ถุงเท้า5"

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

settings

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

ประเภท

กิจกรรม

onProxyError

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

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

พารามิเตอร์

  • Callback

    ฟังก์ชัน

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

    (details: object)=>void

    • รายละเอียด

      ออบเจ็กต์

      • รายละเอียด

        string

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

      • error

        string

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

      • fatal

        boolean

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