LeoHirasawa 2017-08-15 06:59 采纳率: 0%
浏览 1382
已结题

急求大佬指导grpc python进行安全连接的代码(有PHP版本的代码,改写成python)

急求大佬,我现在在用python写grpc的客户端,用来获取数据提供商的股票数据。提供商只给了我一个PHP版本的代码用作指导,但是我需要用python写。其他地方都没有问题了,只有安全连接这个部分卡住了,查了两天也没查到解决办法。。用了好几种api可是都不行。情况就是有url,端口,.pem格式的证书以及账号和密码。大概的思路应该是在建立channel的时候带入额外的账号密码等信息?
求大佬帮忙看看用python怎么写呢。。跪谢大佬了!

下面为php代码:
图片说明

下面为我写的不好用的python代码:

 from __future__ import print_function

import grpc

import historicalQuote_pb2
import historicalQuote_pb2_grpc
import common_pb2
import common_pb2_grpc
import marketData_pb2
import marketData_pb2_grpc

import os

from google import auth as google_auth
from google.auth.transport import grpc as google_auth_transport_grpc
from google.auth.transport import requests as google_auth_transport_requests

def run():
    symbol = common_pb2.Symbol()
    symbol.code = "BABA"
    symbol.market = common_pb2.US
    symbol.type = common_pb2.Stock

    market_request = marketData_pb2.MarketDataRequest()
    market_request.symbol.code = symbol.code
    market_request.symbol.market = symbol.market
    market_request.symbol.type = symbol.type
    market_request.language = common_pb2.zhHans

    print(market_request)

    try:
        path = os.path.abspath('.')
        pemPath = path + '/open_test_cert.pem'
        transport_creds = grpc.ssl_channel_credentials(open(pemPath).read())
        options = []
        update_metadata = {}
        update_metadata2 = {}

        update_metadata['UserName'] = 'xxxx'
        update_metadata['Password'] = 'yyyy'
        update_metadata2['grpc.ssl_target_name_override'] = 'open.test.yintongzhibo.com'
        options.append(update_metadata)
        # options.append(update_metadata2)
        channel = grpc.secure_channel("open.test.yintongzhibo.com:9002",transport_creds,options)



        # credentials , project= google_auth.default(scopes=(scope1,scope2,scope3))
        # credentials , project= google_auth.default()
        # http_request = google_auth_transport_requests.Request()
        # metadata_plugin = AuthMetadataPlugin(credentials,http_request)
        # google_auth_credentials = grpc.metadata_call_credentials(metadata_plugin)
        # ssl_credentials = grpc.ssl_channel_credentials(open(pemPath).read())
        # composite_credentials = grpc.composite_channel_credentials(ssl_credentials,google_auth_credentials)
        # channel = grpc.secure_channel("open.test.yintongzhibo.com:9002",composite_credentials)
        # channel = google_auth_transport_grpc.secure_authorized_channel(credentials,request,'open.test.yintongzhibo.com:9002')



        stub = historicalQuote_pb2_grpc.HistoricalQuoteServiceStub(channel)
        response = stub.getTodayM1Quotes(symbol)
        # stub = marketData_pb2_grpc.MarketDataServiceStub(channel)
        # response = stub.getMarketData(market_request)
        print(response.message)

    except Exception as e:
        print (e)



if __name__ == '__main__':
  run()

  • 写回答

3条回答

  • LeoHirasawa 2017-08-15 08:06
    关注

    求大佬啊。。。。。。。。。。。。。。。。。

    评论

报告相同问题?

悬赏问题

  • ¥30 这是哪个作者做的宝宝起名网站
  • ¥60 版本过低apk如何修改可以兼容新的安卓系统
  • ¥25 由IPR导致的DRIVER_POWER_STATE_FAILURE蓝屏
  • ¥50 有数据,怎么建立模型求影响全要素生产率的因素
  • ¥50 有数据,怎么用matlab求全要素生产率
  • ¥15 TI的insta-spin例程
  • ¥15 完成下列问题完成下列问题
  • ¥15 C#算法问题, 不知道怎么处理这个数据的转换
  • ¥15 YoloV5 第三方库的版本对照问题
  • ¥15 请完成下列相关问题!