Apakah ada cara untuk membuat npm menginstal (perintah) untuk bekerja di belakang proxy?


266

Baca tentang variabel proxy dalam .npmrcfile tetapi tidak berfungsi. Mencoba menghindari mengunduh secara manual semua paket yang diperlukan dan menginstal.

Jawaban:


343

Saya memecahkan masalah ini dengan cara ini:

  1. Saya menjalankan perintah ini:

    npm config set strict-ssl false
  2. Kemudian atur npm untuk dijalankan dengan http, bukan https:

    npm config set registry "http://registry.npmjs.org/"
  3. Kemudian saya menginstal paket menggunakan sintaks ini:

    npm --proxy http://username:password@cacheaddress.com.br:80 install packagename

Lewati username:passwordbagian ini jika proxy tidak mengharuskan Anda untuk mengautentikasi

EDIT: Seorang teman saya baru saja menunjukkan bahwa Anda mungkin mendapatkan NPM untuk bekerja di belakang proxy dengan mengatur KEDUA HTTP_PROXY dan variabel lingkungan HTTPS_PROXY, kemudian biasanya mengeluarkan perintah npm install express (misalnya)

EDIT2: Seperti komentar @BStruthers, perlu diingat bahwa kata sandi yang mengandung "@" tidak akan diuraikan dengan benar, jika mengandung @ cantumkan seluruh kata sandi dalam tanda kutip


7
Tunggu sebentar, jika kata sandi Anda mengandung "@" npm tidak akan melewatkan pengaturan proxy Anda dengan benar. Solusi yang potensial adalah dengan meletakkan nama pengguna palsu: kata sandi di konfigurasi npm, dan menggunakan proxy lokal (seperti fiddler) untuk memodifikasi header Proxy-Authorization permintaan untuk memiliki nama pengguna yang benar: kata sandi. Ingatlah bahwa nama pengguna: kata sandi yang disimpan dalam Proksi-Otorisasi adalah base64 yang disandikan.
BStruthers

14
Jika kata sandi Anda mengandung simbol @, Anda dapat meneruskannya dengan memasukkan nama pengguna dan kata sandi di dalam tanda kutip.
absynthe web minded smith

9
Anda dapat memiliki karakter khusus dalam kata sandi Anda, tetapi mereka harus di-url-encode. Jadi, jika kata sandi Anda my@password, file .npmrc Anda seharusnya my%40passworduntuk bagian kata sandi. Menempatkannya dalam tanda kutip bekerja dalam beberapa kasus, tetapi menyandikannya sangat mudah.
Chris Jaynes

1
Gotcha lain! Jika Anda telah menetapkan variabel sistem HTTP-PROXY sebelumnya, pastikan Anda menghapusnya!
Sydwell

1
Kamu legenda! Saya sudah menyerah untuk mencoba npm bekerja di tempat kerja, tetapi ini akhirnya menyelesaikannya.
tamj0rd2

308

Setup npmproxy

Untuk HTTP:

npm config set proxy http://proxy_host:port

Untuk HTTPS:

gunakan alamat proxy https jika ada

npm config set https-proxy https://proxy.company.com:8080

lain menggunakan kembali alamat proxy http

npm config set https-proxy http://proxy.company.com:8080

Catatan : https-proxy tidak memiliki httpsprotokol, tetapi http.


9
Tidak ada dukungan SOCKS?
GRM

57
Perhatikan bahwa https-proxy tidak memiliki 'https' sebagai protokol, tetapi 'http'. Mengubah ini memecahkan masalah bagi saya.
peterhil

3
@peterhil Terima kasih atas tipnya. Ini gila tapi saya menghabiskan waktu berjam-jam untuk menyelesaikan ini dengan "https". Adakah yang tahu mengapa ini bekerja seperti ini?
Manoj NV

2
@ ManojNV, koneksi ke server proxy tidak dienkripsi. Itu tidak berbicara HTTPS ke server proxy, hanya HTTP. Payloadnya adalah SSL antara klien dan server tujuan. Jika itu HTTPS ke server proxy, maka semuanya akan terenkripsi / didekripsi dua kali.
Jamie

1
Halus. Terima kasih banyak @peterhil
Alec Breton

104

Jika ragu, coba semua perintah ini, seperti yang saya lakukan:

npm config set registry http://registry.npmjs.org/
npm config set proxy http://myusername:mypassword@proxy.us.somecompany:8080
npm config set https-proxy http://myusername:mypassword@proxy.us.somecompany:8080
npm config set strict-ssl false
set HTTPS_PROXY=http://myusername:mypassword@proxy.us.somecompany:8080
set HTTP_PROXY=http://myusername:mypassword@proxy.us.somecompany:8080
export HTTPS_PROXY=http://myusername:mypassword@proxy.us.somecompany:8080
export HTTP_PROXY=http://myusername:mypassword@proxy.us.somecompany:8080
export http_proxy=http://myusername:mypassword@proxy.us.somecompany:8080

npm --proxy http://myusername:mypassword@proxy.us.somecompany:8080 \
--without-ssl --insecure -g install

=======

MEMPERBARUI

Masukkan pengaturan Anda ke dalam ~/.bashrcatau ~/.bash_profilejadi Anda tidak perlu khawatir tentang pengaturan Anda setiap kali Anda membuka jendela terminal baru!

Jika perusahaan Anda seperti milik saya, saya harus sering mengganti kata sandi. Jadi saya menambahkan yang berikut ke ~ / .bashrc atau ~ / .bash_profile sehingga setiap kali saya membuka terminal, saya tahu npm saya mutakhir!

  1. Cukup tempel kode berikut di bagian bawah ~/.bashrcfile Anda :

    ######################
    # User Variables (Edit These!)
    ######################
    username="myusername"
    password="mypassword"
    proxy="mycompany:8080"
    
    ######################
    # Environement Variables
    # (npm does use these variables, and they are vital to lots of applications)
    ######################
    export HTTPS_PROXY="http://$username:$password@$proxy"
    export HTTP_PROXY="http://$username:$password@$proxy"
    export http_proxy="http://$username:$password@$proxy"
    export https_proxy="http://$username:$password@$proxy"
    export all_proxy="http://$username:$password@$proxy"
    export ftp_proxy="http://$username:$password@$proxy"
    export dns_proxy="http://$username:$password@$proxy"
    export rsync_proxy="http://$username:$password@$proxy"
    export no_proxy="127.0.0.10/8, localhost, 10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16"
    
    ######################
    # npm Settings
    ######################
    npm config set registry http://registry.npmjs.org/
    npm config set proxy "http://$username:$password@$proxy"
    npm config set https-proxy "http://$username:$password@$proxy"
    npm config set strict-ssl false
    echo "registry=http://registry.npmjs.org/" > ~/.npmrc
    echo "proxy=http://$username:$password@$proxy" >> ~/.npmrc
    echo "strict-ssl=false" >> ~/.npmrc
    echo "http-proxy=http://$username:$password@$proxy" >> ~/.npmrc
    echo "http_proxy=http://$username:$password@$proxy" >> ~/.npmrc
    echo "https_proxy=http://$username:$password@$proxy" >> ~/.npmrc
    echo "https-proxy=http://$username:$password@$proxy" >> ~/.npmrc
    
    ######################
    # WGET SETTINGS
    # (Bonus Settings! Not required for npm to work, but needed for lots of other programs)
    ######################
    echo "https_proxy = http://$username:$password@$proxy/" > ~/.wgetrc
    echo "http_proxy = http://$username:$password@$proxy/" >> ~/.wgetrc
    echo "ftp_proxy = http://$username:$password@$proxy/" >> ~/.wgetrc
    echo "use_proxy = on" >> ~/.wgetrc
    
    ######################
    # CURL SETTINGS
    # (Bonus Settings! Not required for npm to work, but needed for lots of other programs)
    ######################
    echo "proxy=http://$username:$password@$proxy" > ~/.curlrc
  2. Kemudian edit bidang "nama pengguna", "kata sandi", dan "proxy" dalam kode yang Anda tempel.

  3. Buka terminal baru

  4. Periksa pengaturan Anda dengan menjalankan npm config listdancat ~/.npmrc

  5. Coba instal modul Anda menggunakan

    • npm install __, atau
    • npm --without-ssl --insecure install __, atau
    • timpa pengaturan proxy Anda dengan menggunakan npm --without-ssl --insecure --proxy http://username:password@proxy:8080 install __.
    • Jika Anda ingin modul tersedia secara global, tambahkan opsi -g

3
Perintah terakhir berhasil untuk saya. Semua yang sebelumnya gagal
foecum

3
saya membaca sekitar 50 jawaban mengenai konfigurasi proxy ini ... satu-satunya yang berfungsi adalah jawaban Anda ... terima kasih !!!
Lorenzo

4
Terima kasih kawan !! Senang itu berhasil! Ini telah menjadi sakit kepala yang sangat besar di tempat kerja jadi saya senang saya dapat membantu orang lain: P
Katie

2
+1. Ini bekerja. Saya menggunakan commands- npm config set registry http://registry.npmjs.org/, npm config set proxy http://myusername:mypassword@proxy.us.somecompany:8080, npm config set https-proxy http://myusername:mypassword@proxy.us.somecompany:8080, npm config set strict-ssl falseuntuk config NPM dan kemudian diinstal paket NPM menggunakan npm --proxy http://myusername:mypassword@proxy.us.somecompany:8080 --without-ssl --insecure -g install {packagename}. Terima kasih
Atur

1
Setelah tiga hari mencoba solusi ini berhasil untuk saya.
Mohan Singh

33

Sudahkah Anda mencoba opsi baris perintah alih-alih .npmrc file?

Saya pikir sesuatu seperti npm --proxy http://proxy-server:8080/ install {package-name} bekerja untuk saya.

Saya juga melihat yang berikut ini: npm config set proxy http://proxy-server:8080/


+1 saya mencoba yang lain ini yang berhasil untuk saya. dengan bagian auth dari Renato Gama
winner_joiner

20

Meskipun sudah ada banyak saran yang baik, untuk lingkungan saya (Windows 7, menggunakan PowerShell) dan versi terakhir yang tersedia dari node.js (v8.1.2) semua di atas tidak berfungsi, kecuali ketika saya mengikuti pengaturan brunowego .

Jadi, periksa pengaturan Anda dengan:

npm config list

Pengaturan di belakang proxy:

npm config set registry http://registry.npmjs.org/
npm config set http-proxy http://username:password@ip:port
npm config set https-proxy http://username:password@ip:port
npm config set proxy http://username:password@ip:port
npm set strict-ssl false

Semoga ini akan menghemat waktu untuk seseorang


bagaimana cara menemukan alamat proxy saya?
Robin

@Robin Salah satu cara, jika menggunakan windows, IE menyimpannya. Anda dapat masuk di bawah IE dan melihat pengaturan LAN di bawah koneksi, dan itu akan menunjukkannya di sana.
eaglei22

@Robin tentu saja tergantung pada peramban, tetapi biasanya di bawah pengaturan
Carmine Tambascia

@Robin di browser di bawah pengaturan Anda harus melihat / memeriksa pengaturan proxy. Biasanya ada file dengan .pac di mana terakhir seperti seharusnya: PROXY YourProxyAdress: PORT
Carmine Tambascia

17

Ini berfungsi untuk saya di Windows:

npm config set proxy http://domain%5Cuser:pass@host:port

Jika Anda tidak berada dalam domain apa pun, gunakan:

npm config set proxy http://user:pass@host:port

Jika password Anda mengandung karakter khusus seperti ", @, :dan sebagainya, menggantinya dengan URL dikodekan nilai-nilai mereka. Misalnya "-> %22, @-> %40, :-> %3A. %5Cdigunakan untuk karakter \.


6
Terima kasih atas sarannya, ini berhasil untuk saya. Anda dapat membuka konsol javascript Anda dengan ctrl + shift + j dan ketik encodeURIComponent("YourP@ssword")untuk mendapatkan versi sandi Anda yang disandikan.
jaggedsoft

15

Untuk mengatur proxy http, atur flag -g :

sudo npm config set proxy http://proxy_host:port -g

Untuk proxy https, sekali lagi pastikan flag -g disetel:

sudo npm config set https-proxy http://proxy_host:port -g


apa arti dari -g?
David

1
mengaturnya secara global, bukan untuk instalasi lokal
Andrei

8
$ npm config set proxy http://login:pass@host:port
$ npm config set https-proxy http://login:pass@host:port

1
Tolong tambahkan beberapa komentar.
Maks

8

Ini bekerja untuk saya

npm config set proxy http://proxy.company.com:8080
npm config set https-proxy http://proxy.company.com:8080
npm set strict-ssl=false

7

vim ~/.npmrcdi mesin Linux Anda dan tambahkan berikut ini. Jangan lupa untuk menambahkan registrybagian karena ini menyebabkan kegagalan dalam banyak kasus.

proxy=http://<proxy-url>:<port>
https-proxy=https://<proxy-url>:<port>
registry=http://registry.npmjs.org/

2
Banyak proxy mendukung tunneling permintaan https, tetapi mereka tidak akan menangani koneksi https untuk diri mereka sendiri. Karena itu, ketika mengalami masalah, coba modifikasi https-proxy=https://..kehttps-proxy=http://..
YoYo

7

Akhirnya saya berhasil menyelesaikan masalah ini di belakang proxy dengan otentikasi AD. Saya harus mengeksekusi:

npm config set proxy http://domain%5Cuser:password@proxy:port/
npm config set https-proxy http://domain%5Cuser:password@proxy:port/

Sangat penting untuk menyandikan URL karakter chars khusus seperti backshlash atau # Dalam kasus saya, saya harus menyandikan

  1. backshlashdengan% 5C sehingga domain\user willmenjadidomain%5Cuser
  2. #masuk dengan %23%0Abegitu kata sandi seperti Password#2akanPassword%23%0A2

Saya juga menambahkan pengaturan berikut:

npm config set strict-ssl false
npm config set registry http://registry.npmjs.org/

6

Meskipun saya menetapkan proxy dengan config, masalah tidak terpecahkan tetapi setelah yang satu ini bekerja untuk saya:

npm --https-proxy http://XX.AA.AA.BB:8080 pasang cordova-plugins

npm --proxy http://XX.AA.AA.BB:8080 instal


Yang ini bekerja untuk saya, tidak ada perubahan lain. Buka jendela perintah dan gunakan di atas dan itu akan bekerja
AKS

6

Saya mencoba semua opsi ini, tetapi proxy saya tidak memilikinya karena suatu alasan. Kemudian, lahir dari kehancuran / keputusasaan, saya mencoba secara acakcurl di shell Git Bash saya, dan ternyata berhasil.

Membatalkan pengaturan semua opsi proxy

npm config rm proxy
npm config rm https-proxy

Dan kemudian berjalan npm installdi shell Git Bash saya bekerja dengan sempurna. Saya tidak tahu bagaimana ini diatur dengan benar untuk proksi dan Windows cmdprompt tidak, tetapi berhasil.


6
npm config set proxy <http://...>:<port_number>
npm config set registry http://registry.npmjs.org/

Ini menyelesaikan masalah saya.


Yang penting adalah mengubah tautan ke registri: daripada https yang saya miliki sebelumnya ke tautan http.
Alex Fainshtein

6

Setelah akhirnya mengikat jawaban yang berbeda, empat baris pertama @Kayvar jawaban membantu saya untuk menyelesaikan masalah:

npm config set registry http://registry.npmjs.org/
npm config set proxy http://myusername:mypassword@proxy.us.somecompany:8080
npm config set https-proxy http://myusername:mypassword@proxy.us.somecompany:8080
npm config set strict-ssl false


5

Cobalah untuk menemukan .npmrc di C: \ Users \ .npmrc

kemudian buka (notepad), tulis, dan simpan di dalam:

proxy=http://<username>:<pass>@<proxyhost>:<port>

PS: hapus "<" dan ">" tolong !!


5

Bagi saya meskipun python dll semua akan bekerja meskipun npm proxy perusahaan kami tidak akan.

Saya mencoba

npm config set proxy http://proxyccc.xxx.ca:8080 npm config set https-proxy https://proxyccc.xxx.ca:8080 npm config set registry http://registry.npmjs.org/

seperti yang diinstruksikan tetapi terus mendapatkan kesalahan yang sama.

Hanya ketika saya dihapus https-proxy https://proxyccc.xxx.ca:8080 dari file .npmrc yang menginstal npm electron --save-dev bekerja


1
Anda https-proxymungkin tidak https:. Setidaknya, memiliki port yang sama untuk masing-masing mungkin tidak benar, tetapi saya pikir mereka berdua mungkin memiliki nilai yang sama.
toddkaufmann

5

Di sistem Windows

Coba hapus pengaturan proxy dan registri (jika sudah disetel) dan setel variabel lingkungan pada baris perintah via

SET HTTP_PROXY=http://username:password@domain:port
SET HTTPS_PROXY=http://username:password@domain:port

kemudian coba jalankan npm install. Dengan ini, Anda tidak akan mengatur proxy di .npmrc tetapi untuk sesi itu akan berfungsi.


Ini berhasil untuk saya. Simbol equals adalah apa yang membuat semuanya berfungsi. Sebelum itu saya hanya menggunakan SET HTTP_PROXY http://username:password@domain:porttetapi beralih ke SET HTTP_PROXY=http://username:password@domain:porttampaknya membuat semuanya berfungsi
Dib

4

Gunakan perintah di bawah ini di cmd atau GIT Bash atau prompt lainnya

config set proxy $ npm " http://192.168.1.101:4128 "

$ npm config set https-proxy " http://192.168.1.101:4128 "

di mana 192.168.1.101 adalah proxy ip dan 4128 adalah port. ubah sesuai dengan pengaturan proxy Anda. ini bekerja untuk saya.


1
Saya harus menggunakan domain untuk otentikasi, dan saya menggunakan back-slash yang lolos: dengan string ini% 5C. Akhirnya berhasil!
Francesco

4

Banyak aplikasi (misalnya npm) dapat menggunakan pengaturan proxy dari variabel lingkungan pengguna.

Anda bisa menambahkan ke lingkungan Anda mengikuti variabel HTTP_PROXY dan HTTPS_PROXY yang akan memiliki nilai yang sama untuk masing-masing variabel

http: // pengguna: kata sandi @ proxyAddress: proxyPort

Misalnya, jika Anda memiliki Windows, Anda dapat menambahkan proxy sebagai berikut:

Bagaimana tampilannya di Windows


4

Dalam kasus saya, saya lupa mengatur "http: //" di file konfigurasi saya (dapat ditemukan di C: \ Users \ [USERNAME] \ .npmrc) alamat proxy. Jadi, bukannya memiliki

proxy=http://[IPADDRESS]:[PORTNUMBER]
https-proxy=http://[IPADDRESS]:[PORTNUMBER]

Saya punya

proxy=[IPADDRESS]:[PORTNUMBER]
https-proxy=[IPADDRESS]:[PORTNUMBER]

Yang tentu saja tidak berhasil, tetapi pesan kesalahan tidak banyak membantu ...


4

Ada banyak jawaban di atas untuk pertanyaan ini, tetapi tidak ada yang bekerja untuk saya. Semuanya disebutkan untuk ditambahkanhttp:// awalan. Jadi saya menambahkannya juga. Semua gagal.

Akhirnya berhasil setelah saya tidak sengaja menghapus http://awalan. Konfigurasi akhir seperti ini:

npm config set registry http://registry.npmjs.org/
npm config set http-proxy ip:port
npm config set https-proxy ip:port
npm config set proxy ip:port
npm set strict-ssl false

Saya tidak tahu logika di balik ini, tetapi itu berhasil. Jika tidak ada jawaban di atas yang berfungsi untuk Anda, mungkin Anda dapat mencoba cara ini. Semoga yang ini bermanfaat.


4

Ada informasi bagus di halaman curl tentang masalah SSL dan sertifikat . Saya mendasarkan sebagian besar jawaban saya pada informasi di sana.

Menggunakan strict-ssl false adalah praktik buruk dan dapat membuat masalah. Yang bisa kami lakukan adalah menambahkan sertifikat yang disuntikkan, oleh sertifikat "man in the middle".

Cara mengatasi ini di Windows:

  1. Unduh Sertifikat CA dari curl berdasarkan pada bundel CA Mozilla. Anda juga dapat menggunakan shellscript "firefox-db2pem.sh" curl untuk mengonversi basis data Firefox lokal Anda.
  2. Buka laman web menggunakan https, misalnya Stackoverflow di Chrome atau Internet Explorer
  3. Klik ikon kunci, klik Lihat sertifikat atau "Valid" di Chrome
  4. Arahkan ke jalur Sertifikasi. Sertifikat teratas, atau sertifikat root adalah yang ingin kami ekstrak. Klik sertifikat itu dan kemudian "lihat sertifikat"
  5. Klik tab kedua, "Detail". Klik "Salin ke file". Pilih format DER dan catat di mana Anda menyimpan file. Pilih nama file yang cocok, seperti rootcert.cer
  6. Jika Anda telah menginstal Git, Anda akan memiliki openssl.exe. Jika tidak, instal git untuk windows pada tahap ini. Kemungkinan besar openssl executable akan berada di C: \ Program Files \ git \ usr \ bin \ openssl.exe. Kami akan menggunakan openssl untuk mengonversi file ke format PEM yang kami butuhkan untuk NPM untuk memahaminya.
  7. Konversikan file yang Anda simpan di langkah 5 dengan menggunakan perintah ini: di
    openssl x509 -inform DES -in **rootcert**.cer -out outcert.pem -text
    mana rootcert adalah nama file dari sertifikat yang Anda simpan di langkah 5.
  8. Buka outcert.pem dalam editor teks yang cukup pintar untuk memahami akhir baris, jadi bukan notepad. Pilih semua teks dan salin ke clipboard.
  9. Sekarang kami akan menempelkan konten itu ke akhir bundel CA Cert yang dibuat pada langkah 1. Jadi, buka cacert.pem di texteditor lanjutan Anda. Pergi ke akhir file dan tempel konten dari langkah sebelumnya ke akhir file. (Pertahankan garis kosong di bawah apa yang baru saja Anda tempel)
  10. Salin cabundle.pem yang disimpan ke tempat yang sesuai. Misalnya% profil pengguna Anda% atau ~. Catat lokasi file.
  11. Sekarang kita akan memberi tahu npm / benang untuk menggunakan bundel baru. Di baris perintah, tulis di
    npm config set cafile **C:\Users\username\cacert.pem
    mana C: \ Users \ username \ cacert.pem adalah path dari langkah 10.
  12. Opsional: hidupkan lagi ketat-ssl, npm config set strict-ssl true

Fiuh! Kita berhasil! Sekarang npm dapat mengerti cara menghubungkan. Bonusnya adalah Anda dapat memberi tahu curl untuk menggunakan cabundle.pem yang sama dan ia juga akan memahami HTTPs.


3

Berikut langkah-langkah yang saya ikuti (Windows):

  1. Edit file berikut C:\Users\<WIN_USERNAME>\.npmrc
  2. Ekspor sertifikat ke sistem file Anda dari alamat berikut: https://registry.npmjs.org

  3. Arahkan ke lokasi sertifikat yang diekspor dan keluarkan perintah berikut:

    npm config set cafile npm_certificate.cer

  4. Tambahkan perubahan berikut ke file: registry=https://registry.npmjs.org/ strict-ssl=false https-proxy=http://[proxy_user]:[proxy_password]@[proxy_ip]:[proxy_port]/ cafile=npm_certificate.cer

Sekarang Anda harus siap untuk pergi!


2

Masalah saya menjadi kesalahan konyol di pihak saya. Karena suatu hari saya dengan cepat menjatuhkan proksi saya ke file windows * .bat (http_proxy, https_proxy, dan ftp_proxy), saya lupa melarikan diri dari karakter khusus untuk domain \ pengguna urkodekan \ pengguna (% 5C) dan kata sandi memiliki tanda tanya ' (% 3F). Artinya, setelah Anda memiliki perintah yang disandikan, jangan lupa untuk melarikan diri dari '%' dalam perintah file bat.

aku berubah

set http_proxy=http://domain%5Cuser:password%3F@myproxy:8080

untuk

set http_proxy=http://domain%%5Cuser:password%%3F@myproxy:8080

Mungkin ini kasus tepi tetapi mudah-mudahan ini membantu seseorang.


1

ketika saya memberi tanpa awalan http / http dalam pengaturan proxy npm gagal bahkan ketika host proxy dan port adalah nilai yang benar. Ini bekerja hanya setelah menambahkan awalan protokol.


0

Cukup buka terminal baru dan ketik npm config editdan npm config -g edit. Setel ulang ke default. Setelah terminal tutup itu, buka yang baru dan ketik npm --without-ssl --insecure --proxy http://username:password@proxy:8080 install <package>jika Anda perlu menambahkan secara global -g.

Ini bekerja untuk saya, semoga ini akan berhasil untuk Anda :)

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.