Axios: Permintaan ke HTTPS dengan proxy HTTP gagal

Dibuat pada 30 Mei 2017  ·  52Komentar  ·  Sumber: axios/axios

Ringkasan

Mencoba melakukan permintaan HTTPS dengan proxy HTTP gagal.

const req = await axios({
  url: 'https://somedomain.com',
  proxy: {
    host: '89.151.146.7',
    port: 6060,
    auth: {
      username: 'myname',
      password: 'mypass',
    },
  },
});

Hasil dalam:

Error: write EPROTO 140736379442112:error:140770FC:SSL routines:SSL23_GET_SERVER_HELLO:unknown protocol:../deps/openssl/openssl/ssl/s23_clnt.c:794

Masalahnya sudah dijelaskan oleh @chovy di tiket ini, yang akhirnya ditutup karena OP tidak memiliki masalah yang sama: https://github.com/mzabriskie/axios/issues/662

@chovy berkata:

Saya masih memiliki masalah ini karena tidak dapat mencapai url https dengan proxy http. Saya bisa melakukannya dengan baik dalam permintaan dan juga dalam curl dari Shell. Sesuatu yang tidak bekerja dengan axios. Saya mendapatkan kesalahan EPROTO.

Konteks

  • versi aksio: v0.16.1
  • Lingkungan: simpul v7.10.0, Mac OSX Sierra

Komentar yang paling membantu

Punya masalah serupa baru-baru ini, solusi saya adalah menggunakan terowongan HTTPS-over-HTTP, tentukan port 443 secara eksplisit di URL dan nonaktifkan deteksi proxy otomatis di aksio:

import axios, { AxiosInstance } from 'axios';
import * as tunnel from 'tunnel';

const tunnel = tunnel.httpsOverHttp({
    proxy: {
        host: 'proxy.mycorp.com',
        port: 8000,
    },
});

const httpClient: AxiosInstance = axios.create({
    baseURL: 'https://some.api.com:443',
    httpsAgent: tunnel,
    proxy: false,
});

Lebih lanjut tentang solusi dalam artikel ini .

Semoga ini membantu,
Jan

Semua 52 komentar

Saya mengalami masalah yang sama dengan permintaan https melalui proxy. Saya tidak ingin pindah ke request.js.

return axios({ url: 'https://site.com', proxy: { host: 'proxy.xxxxxx.com', port: 3128 } })
Hasil:
Error: write EPROTO 139800246822688:error:140770FC:SSL routines:SSL23_GET_SERVER_HELLO:unknown protocol:../deps/openssl/openssl/ssl/s23_clnt.c:794

request.js dan curl dalam situasi ini berfungsi dengan baik.

Konteks

  • versi aksio: v0.16.1
  • Lingkungan: node v6.9.5, CentOS rilis 6.8 (Final)

Saya dan rekan saya mengidentifikasi masalahnya, PR harus segera hadir

Masalah yang sama di sini: Meminta sumber daya https di belakang proxy http.

axios.get('https://resources.json', {   
   proxy: {
      host: 'http://my.proxy.com',
      port: 12345
   }
})
   .then(() => {})
   .catch(() => {});

Hasil:
Error: getaddrinfo ENOTFOUND http://my.proxy.com http://my.proxy.com:12345

Ada kemajuan sejauh ini?

Masalah yang sama disini.

Ada berita ?

Masalah saya tidak terkait dengan proxy, saya harus mengirim permintaan GET ke domain https yang tidak disertifikasi. Di curl di dalam terminal linux, solusinya adalah menggunakan flag -k atau --insecure . Saya tidak dapat menemukan solusi Axios, tetapi dengan request lib saya melakukannya seperti itu; mungkin memberi Anda ide:

const agentOptions = {
    host: '10.100.0.10',
    port: '443',
    path: '/',
    rejectUnauthorized: false,
  }

const agent = new https.Agent(agentOptions)
request({
      url: 'https://10.100.0.10/myUncertifiedTargetUrl',
      method: 'GET',
      agent,
    }, (err, resp, body) => {
...

Jangan ragu untuk menggunakan ini sampai mereka mendapatkan #959 digabung.

Sama di sini, btw @mistermoe 's PR berfungsi dengan baik

@mistermoe Saya baru saja meninggalkan pekerjaan tanpa membuatnya berhasil :(

Saya menggunakan paket ini: https://github.com/Yoctol/messaging-apis/tree/master/packages/messaging-api-messenger

Dan jika saya mengganti "axios" dengan milik Anda, kesalahan berikut akan hilang:
"Kesalahan: tulis EPROTO 139800246822688: error:140770FC :SSL routines:SSL23_GET_SERVER_HELLO : protokol tidak diketahui

Tapi saya punya sesuatu seperti:
"Kesalahan: getaddrinfo EAI_AGAIN"

Saya perhatikan bahwa plugin Messenger membuat permintaan seperti itu:
`
biarkan klien = axios.create({ ... });

klien.dapatkan('...')
`

Apakah Anda berhasil dengan cara ini atau tidak langsung dengan fungsi "permintaan" Axios?

Terima kasih!

EDIT: Satu lagi yang mengalami masalah ini:
https://github.com/axios/axios/pull/959#issuecomment -337595602

Adakah peluang untuk menggabungkan ini? Bisakah kita memanfaatkan config.transport yang baru ditambahkan untuk menghindari masalah ini?

up, masalah yang sama di sini!

Sayangnya, ini permintaan tarik tidak bergabung, tapi saya tetap masalah ini https://github.com/Sitronik/axios

Punya masalah serupa baru-baru ini, solusi saya adalah menggunakan terowongan HTTPS-over-HTTP, tentukan port 443 secara eksplisit di URL dan nonaktifkan deteksi proxy otomatis di aksio:

import axios, { AxiosInstance } from 'axios';
import * as tunnel from 'tunnel';

const tunnel = tunnel.httpsOverHttp({
    proxy: {
        host: 'proxy.mycorp.com',
        port: 8000,
    },
});

const httpClient: AxiosInstance = axios.create({
    baseURL: 'https://some.api.com:443',
    httpsAgent: tunnel,
    proxy: false,
});

Lebih lanjut tentang solusi dalam artikel ini .

Semoga ini membantu,
Jan

@jan-molak Perbaikan saya mudah digunakan:

  1. npm instal axios-https-proxy-fix
  2. Kemudian
import axios from 'axios-https-proxy-fix'; 

const proxy = {
  host: 'some_ip',
  port: some_port_number,
  auth: {
    username: 'some_login',
    password: 'some_pass'
  }
};

async someMethod() {
  const result = await axios.get('some_https_link', {proxy});
}

Solusi @ jan-molak bekerja untuk saya juga. Akan sangat menyenangkan untuk tidak memaksakan nomor port pada url.

@jan-molak @Sitronik Saya mencoba solusi Anda tetapi mendapatkan Error: socket hang up.
Yang saya inginkan adalah melihat bagaimana permintaan melewati charles, jadi saya membuka charles, dan mengatur proxy ke {host:'127.0.0.1', port:8888 } dalam kode saya. Saya tidak tahu apakah cocok untuk menggunakan solusi Anda

Adakah peluang untuk disertakan dalam 0.19.0?

@astappev ini sepertinya perlu diperbaiki secepatnya. Ada banyak masalah dan PR terkait yang harus saya saring, tetapi saya akan menambahkannya ke peta jalan 0.19.0 saya.

@emilyemorehouse , ada perkiraan kapan rilisnya?
PR #959 memecahkan bagian penting dari masalah, masalah lain seperti pengalihan proxy dan dapat ditingkatkan nanti. Perubahan pada #959 cukup sederhana dan dapat dipublikasikan hanya dalam beberapa menit.

@Sitronik yang bekerja untuk saya terima kasih

Perbaikan @jan-molak menyelamatkan hari saya.
+1 untuk menggabungkan PR.

Lain +1 untuk menggabungkan ini!!

Masalah yang sama... tolong gabungkan!

Masalah yang sama di sini

@Sitronik yang bekerja untuk saya terima kasih - tolong gabungkan!
Namun pengaturan proxy tampaknya tidak dibaca dari variabel lingkungan (http_proxy / https_proxy) tetapi harus ditentukan sebagai bagian dari AxiosRequestConfig.

+1 Masih menggunakan pekerjaan yang disebutkan di atas tetapi akan senang melihat ini berhasil di luar kotak.

+1 Saat Anda memperbaiki ini? Tapi kita juga butuh no_proxy...

@Sitronik tolong tambahkan PR. Paket Anda axios-https-proxy-fix berfungsi dengan baik. axios.defaults.proxy = {host: ip, port: port}

Masih menjadi masalah, akankah menggunakan paket itu tetapi banyak komit di belakang? Apakah itu bukan masalah :S

akan menggunakan paket itu tetapi banyak komit di belakang?

Sama untuk saya sambil menunggu perubahan itu, saya akan menggunakan node-fetch + httpsProxyAgent + bluebird. Berfungsi dengan baik.

@Makoehle

Hei, saya akhirnya membuatnya berfungsi, coba ekspor http dan https ke "" di terminal Anda

export http_proxy="" && export https_proxy=""

Terima kasih, saya tahu tentang variabel env. Saya mencoba segalanya. Dugaan saya ada hubungannya dengan #1207

Menunggu penggabungan juga. Mengapa begitu lama?

959 telah digabungkan dan tersedia dalam 0.19.0-beta.1

Saya tidak bisa menyelesaikannya di 0.19.0-beta.1, tapi saya memperbaikinya seperti ini

// default axios usage
import * as ProxyAgent from "proxy-agent";
const proxyAgent = new ProxyAgent(process.env.HTTPS_PROXY);  // http://127.0.0.1:1080
Axios.defaults.httpsAgent = proxyAgent;
Axios.defaults.proxy = false;

// google api usage
const Sheets = google.sheets({
    version: "v4",
    auth: key,
    httpsAgent: /dev/.test(process.env.NODE_ENV) ? proxyAgent : false,
    proxy: false
});

0.19.0-beta.1 harus memperbaiki masalah, saya menutup masalah dan merasa bebas untuk membuat yang baru jika ada yang masih mengalami masalah

@Khaledgarbaya Saya masih mengalami masalah ini dengan 0.19.0-beta.1
Pertanyaan saya adalah seperti apa seharusnya permintaan proxy saya (dan bagaimana cara kerja flag isHttps?).

Saya berasumsi bahwa untuk HTTPS melalui HTTP saya akan dengan mudah mengatur url / port http untuk proxy seperti ini:

axiosRequestOptions.proxy = {
            host: '192.0.01',
            port: '8888',
            // isHttps: true, ?
        }

Itu dikatakan di atas masih gagal jadi saya bertanya-tanya apakah ini adalah masalah konfigurasi/dokumentasi di mana penataan properti/objek proxy saya adalah penyebabnya.

@necevil
tuan rumah: '192.0.01'

0.19.0-beta.1 masih tidak berfungsi. Saya terus mendapatkan Request failed with status code 400 . Membuang banyak waktu untuk ini. Beralih ke perpustakaan permintaan dan itu berfungsi seperti pesona pada percobaan pertama.

Berlari ke masalah yang sama.

const axios = require('axios-https-proxy-fix')

memperbaiki masalah untuk saya.

Setelah memperbarui ke 0.18.0 ini sepertinya berhasil untuk saya. Saya harus menentukan opsi berikut untuk kasus penggunaan saya:

axios.get('<some_url_on_corporate_intranet>', {
        proxy: false,
        httpsAgent: https.Agent({
            rejectUnauthorized: false // Allows the use of self-signed certificates (not recommended)
    })

mencoba semua solusi dan semua gagal berdasarkan axios 0.18
solusi akhir :
instal modul nginx ngx_http_proxy_connect_module
lalu request url https melalui proxy http dengan request-promise

Anda tidak perlu Nginx jika menggunakan request. Permintaan ditangani proxy baik-baik saja.

-
Antonius

Pada 17 Januari 2019, pukul 20:44, redbearder [email protected] menulis:

mencoba semua solusi dan semua gagal berdasarkan axios 0.18
solusi akhir :
instal modul nginx ngx_http_proxy_connect_module
lalu request url https melalui proxy http dengan request-promise


Anda menerima ini karena Anda disebutkan.
Balas email ini secara langsung, lihat di GitHub, atau matikan utasnya.

Anda tidak perlu Nginx jika menggunakan request. Permintaan ditangani proxy baik-baik saja. - Antonius

Pada 17 Januari 2019, pukul 20:44, redbearder @ . * > menulis: mencoba semua solusi dan semua gagal berdasarkan axios 0.18 solusi akhir: instal modul nginx ngx_http_proxy_connect_module lalu minta url https melalui proxy http dengan janji-permintaan - Anda menerima ini karena Anda disebutkan. Balas email ini secara langsung, lihat di GitHub, atau matikan utasnya.

Terima kasih atas balasannya
Saya berasumsi bahwa orang akan mengirim permintaan melalui satu alamat IP sebagai gateway proxy, itulah yang akan saya lakukan
Namun permintaan-janji menangkap kesalahan "RequestError: Error: tunneling socket tidak dapat dibuat, kode 400"
jadi saya tidak menemukan solusi dari Node dan kemudian saya mencoba memperbaikinya dari sisi Gateway
dan solusinya keluar di atas

2 tahun kemudian, masih rusak!!!

Gunakan janji permintaan.

Antonius
http://profulstack.com

Pada 18 Juli 2019, pukul 07.05, Yassien [email protected] menulis:

2 tahun kemudian, masih rusak!!!


Anda menerima ini karena Anda disebutkan.
Balas email ini secara langsung, lihat di GitHub, atau matikan utasnya.

Inilah yang saya lakukan untuk mereka yang menemukan ini dan masih ingin menggunakan axios:

const HttpsProxyAgent = require("https-proxy-agent"),
      axios = require("axios");

const httpsAgent = new HttpsProxyAgent({host: "proxyhost", port: "proxyport", auth: "username:password"})

//use axios as you normally would, but specify httpsAgent in the config
axios = axios.create({httpsAgent});

Ini akan memungkinkan Anda membuat permintaan https melalui proxy http, sederhana dan rapi.

Masih memiliki masalah yang sama setelah 2 tahun.
Apakah seseorang sedang mengerjakan ini atau dapatkah kami bergabung untuk berkontribusi?

Hanya mengalami masalah ini sendiri. Berharap kalian bisa memperbaiki ini di beberapa titik.
solusi czl032405 menggunakan proxy-agent berhasil untuk saya.

Menurut rilis 0.19.0, ini telah diperbaiki. Karena jelas belum, masalah baru harus dibuka

Fungsionalitas ini masih rusak di axios 0.19.
Versi 0.19.0 gagal dengan pesan _"Kesalahan: Protokol "http:" tidak didukung. Diharapkan "https:""_
Versi 0.19.1 gagal dengan _"Kesalahan: batas waktu 1000 md terlampaui"_. Meningkatkan batas waktu tidak membantu. Server proxy mengharapkan permintaan CONNECT sementara axios mengirimkan permintaan GET .

Apakah halaman ini membantu?
0 / 5 - 0 peringkat