【问题标题】:Cannot use proxy to connect to Documentdb using python无法使用代理使用 python 连接到 Documentdb
【发布时间】:2020-02-17 17:20:52
【问题描述】:

我尝试通过代理连接到我的 documentDB Azure,但出现以下错误:

引发 ConnectionError(e, request=request) requests.exceptions.ConnectionError: HTTPSConnectionPool(host='xxxxxxx.azure.com', port=xxx): Max url 超出重试次数:/(由 NewConnectionError(':无法建立新连接:[Errno 11004] getaddrinfo failed')引起)

代码如下:

#coding:utf-8
from pydocumentdb import document_client
import azure.cosmos.documents as documents
uri = 'xxxxxxx.azure.com:443/'
key = 'xxxxxxxxxx'
connection_policy = documents.ConnectionPolicy()
connection_policy.ProxyConfiguration = documents.ProxyConfiguration()
connection_policy.ProxyConfiguration.Host = 'xxx.xx.xx.xxx'
connection_policy.ProxyConfiguration.Port = xxxx #I also have trid with = 'xxxx'
client = document_client.DocumentClient(uri, {'masterKey': key}, connection_policy)
db_id = 'Store'
db_query = "select * from r where r.id = '{0}'".format(db_id)
db = list(client.QueryDatabases(db_query))[0]
db_link = db['_self']

coll_id = 'collection'
coll_query = "select * from r where r.id = '{0}'".format(coll_id)
coll = list(client.QueryCollections(db_link, coll_query))[0]
coll_link = coll['_self']


query = { 'query': 'select c.date as date from c' }
result_iterable = client.QueryDocuments(coll_link, query)
for item in iter(result_iterable):
   date= str(item["date"])

【问题讨论】:

  • 谁能帮帮我?
  • 可能为时已晚...connection_policy.ProxyConfiguration.Host = 'https' + 'MyProxyServersName' 为我工作...

标签: python-3.x azure proxy azure-cosmosdb


【解决方案1】:

我测试了你的代码,它对我有用。

from pydocumentdb import document_client
import azure.cosmos.documents as documents

uri = 'https://***.documents.azure.com:443/'
key = '***'
connection_policy = documents.ConnectionPolicy()
connection_policy.ProxyConfiguration = documents.ProxyConfiguration()
connection_policy.ProxyConfiguration.Host = '***'
connection_policy.ProxyConfiguration.Port = 8080
client = document_client.DocumentClient(uri, {'masterKey': key}, connection_policy)
db_id = 'db'
db_query = "select * from r where r.id = '{0}'".format(db_id)
db = list(client.QueryDatabases(db_query))[0]
db_link = db['_self']

coll_id = 'coll'
coll_query = "select * from r where r.id = '{0}'".format(coll_id)
coll = list(client.QueryCollections(db_link, coll_query))[0]
coll_link = coll['_self']

query = {'query': 'select c.title as title from c'}
options = {'enableCrossPartitionQuery': 'true'}
result_iterable = client.QueryDocuments(coll_link, query, options)
for item in iter(result_iterable):
    title = str(item["title"])
    print(title)
    break

输出:

我的代理服务器是一个简单的 nodejs 服务器,它运行在另一端并监听8080 端口:

var http = require('http');
// proxy url host
var HOST = 'localhost';
// server port
var PORT = 8080;

var log = function () {
  var now = new Date().toISOString();
  arguments[0] = '[' + now + '] ' + arguments[0];
  console.log.apply(console, arguments);
};

var getHeader = function (req) {
  var ret = {};
  for (var i in req.headers) {
    if (!/host|connection/i.test(i)) {
      ret[i] = req.headers[i];
    }
  }
  return ret;
};

var getPath = function (req) {
  var url = req.url;
  if (url.substr(0, 7).toLowerCase() === 'http://') {
    var i = url.indexOf('/', 7);
    if (i !== -1) {
      url = url.substr(i);
    }
  }
  return url;
};

var counter = 0;
var onProxy = function (req, res) {
  counter++;
  var num = counter;
  var opt = {
    host:     HOST,
    path:     getPath(req),
    method:   req.method,
    headers:  getHeader(req)
  };
  log('#%d\t%s http://%s%s', num, req.method, opt.host, opt.path);
  var req2 = http.request(opt, function (res2) {
    res.writeHead(res2.statusCode, res2.headers);
    res2.pipe(res);
    res2.on('end', function () {
      log('#%d\tEND', num);
    });
  });
  if (/POST|PUT/i.test(req.method)) {
    req.pipe(req2);
  } else {
    req2.end();
  }
  req2.on('error', function (err) {
    log('#%d\tERROR: %s', num, err.stack);
    res.end(err.stack);
  });
};

var server = http.createServer(onProxy);
server.listen(PORT);
console.log('start listening port:' + PORT);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-09-23
    • 2017-11-26
    • 2020-11-04
    • 1970-01-01
    • 1970-01-01
    • 2018-03-09
    • 2020-04-06
    • 1970-01-01
    相关资源
    最近更新 更多