Не удалось отправить HTTP-запрос через прокси https - PullRequest
1 голос
/ 11 февраля 2020

Я использую следующий код для отправки запроса Get / Post на мой сервер, и код может работать хорошо.


require "net/https"
require "openssl"
require "uri"

tenantID = "95bde077-58e8-b58351b28b8a"
url = "https://example.com:443/application/0.9/providers?_filter=keyIndexName=xxxxx"

headers = {
  "Content-Type" => "application/json",
  "X-TenantID" => tenantID,
}

uri = URI.parse(url)

http_client = Net::HTTP.new(uri.host, uri.port)
http_client.use_ssl = true if uri.scheme == "https"
http_client.verify_mode = OpenSSL::SSL::VERIFY_PEER

p12 = OpenSSL::PKCS12.new(File.read("./keyfile.p12"), "0K4xgXbpzJkMrpGLILp4ZD7ijcdOnOkC")
http_client.cert = p12.certificate
http_client.key = p12.key
ca_store = OpenSSL::X509::Store.new
ca_store.add_file "./ca.pem"

request = Net::HTTP::Get.new(uri.request_uri, initheader = headers)
http_client.set_debug_output $stderr
res = http_client.request(request)

puts res.code
puts res.body

Но после того, как я добавлю прокси-сервер к http_client, выполните следующие действия:

proxy_uri = URI.parse("https://proxy.xxx.com:443")

http_client = Net::HTTP.new(uri.host, uri.port, proxy_uri.host, proxy_uri.port)

Операция завершилась неудачно и всегда выдает запрос

opening connection to proxy.xxx.com:443...
opened
<- "CONNECT example.com:443 HTTP/1.1\r\nHost: example.com.com:443\r\n\r\n"
-> "\x15\x03\x03\x00\x02\x02\n"
Conn close because of connect error wrong status line: "\x15\x03\x03\x00\x02\x02"
Traceback (most recent call last):
        6: from thread.rb:60:in `<main>'
        5: from /Users/xxxx/.rvm/rubies/ruby-2.6.3/lib/ruby/2.6.0/net/http.rb:1470:in `request'
        4: from /Users/xxxx/.rvm/rubies/ruby-2.6.3/lib/ruby/2.6.0/net/http.rb:919:in `start'
        3: from /Users/xxxx/.rvm/rubies/ruby-2.6.3/lib/ruby/2.6.0/net/http.rb:930:in `do_start'
        2: from /Users/xxxx/.rvm/rubies/ruby-2.6.3/lib/ruby/2.6.0/net/http.rb:969:in `connect'
        1: from /Users/xxxx/.rvm/rubies/ruby-2.6.3/lib/ruby/2.6.0/net/http/response.rb:29:in `read_new'
/Users/xxxx/.rvm/rubies/ruby-2.6.3/lib/ruby/2.6.0/net/http/response.rb:42:in `read_status_line': wrong status line: "\x15\x03\x03\x00\x02\x02" (Net::HTTPBadResponse)

Я подтверждаю, что прокси-сервер не устанавливает никакой аутентификации пользователя / пароля. Почему прокси-сервер всегда возвращает HTTPBadResponse. Что означает строка "\ x15 \ x03 \ x03 \ x00 \ x02 \ x02"?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...