域连接协议的python客户端库。参见:https://domainconnect.org

domain-connect的Python项目详细描述


域连接

域连接协议的python客户端库。 有关协议的详细信息,请访问:https://domainconnect.org

库提供同步和异步模式下的服务提供程序功能。

规范参考

https://github.com/Domain-Connect/spec/blob/master/Domain%20Connect%20Spec%20Draft.adoc

  • 版本:2.1
  • 版次:52

用法

同步流量

只要找到链接。自动解决发现和模板查询部分

fromdomainconnectimport*dc=DomainConnect()try:# change 'connect.domains' to any domain you have access tores=dc.get_domain_connect_template_sync_url(domain="foo.connect.domains",provider_id="exampleservice.domainconnect.org",service_id="template1",params={"IP":"132.148.25.185","RANDOMTEXT":"shm:1531371203:Hello world sync"},redirect_uri="http://example.com",state="{name=value}")print(res)exceptDomainConnectExceptionase:print('Exception: {}'.format(e))raise

输出:

https://domainconnect.1and1.com/sync/v2/domainTemplates/providers/exampleservice.domainconnect.org/services/template1/apply?domain=connect.domains&host=foo&IP=132.148.25.185&RANDOMTEXT=shm%3A1531371203%3AHello+world+sync&redirect_uri=http%3A%2F%2Fexample.com&state=%7Bname%3Dvalue%7D

异步流

fromdomainconnectimport*# to assure input works like raw_input in python 2frombuiltinsimportinput# this will be normally a secret local store on the servercredentials={"1and1":DomainConnectAsyncCredentials(client_id='exampleservice.domainconnect.org',client_secret='cd$;CVZRj#B8C@o3o8E4v-*k2H7S%)',api_url='https://api.domainconnect.1and1.com'),"GoDaddy":DomainConnectAsyncCredentials(client_id='exampleservice.domainconnect.org',client_secret='DomainConnectGeheimnisSecretString',api_url='https://domainconnect.api.godaddy.com'),}dc=DomainConnect()try:# change 'connect.domains' to any domain you have access tocontext=dc.get_domain_connect_template_async_context(domain='async.connect.domains',provider_id='exampleservice.domainconnect.org',service_id=['template1','template2'],params={"IP":"132.148.25.185","RANDOMTEXT":"shm:1531371203:Hello world async"},redirect_uri='https://exampleservice.domainconnect.org/async_oauth_response')# Route the browser to URL by a linkprint('Please open URL: {}'.format(context.asyncConsentUrl))# Normally code will arrive as query param on redirect_urlcode=input("Please enter code: ")context.code=code# token will be written into context. Context can be saved and re-used for async callsdc.get_async_token(context,credentials[context.config.providerName])print('Token obtained')#apply the template any later with the contextdc.apply_domain_connect_template_async(context,service_id='template1',params={"IP":"132.148.25.185","RANDOMTEXT":"shm:1531371203:Hello world async"},force=True)print('Template applied')exceptDomainConnectExceptionase:print('Exception: {}'.format(e))raise

输出:

Please open URL: https://domainconnect.1and1.com/async/v2/domainTemplates/providers/exampleservice.domainconnect.org?client_id=exampleservice.domainconnect.org&scope=template1+template2&domain=connect.domains&host=async&IP=132.148.25.185&RANDOMTEXT=shm%3A1531371203%3AHello+world+async&redirect_uri=https%3A%2F%2Fexampleservice.domainconnect.org%2Fasync_oauth_response
Please enter code: >? 8d9a72b5-d2d9-48e3-b615-34fed04d3398
Token obtained
Template applied

同步流与签名请求

只要找到链接。自动解决发现和模板查询部分。

fromdomainconnectimport*dc=DomainConnect()try:# change 'connect.domains' to any domain you have access topriv_key='-----BEGIN RSA PRIVATE KEY-----\nMIIEowIBAAKCAQEA18SgvpmeasN4BHkkv0SBjAzIc4grYLjiAXRtNiBUiGUDMeTzQrKTsWvy9NuxU1dIHCZy9o1CrKNg5EzLIZLNyMfI6qiXnM+HMd4byp97zs/3D39Q8iR5poubQcRaGozWx8yQpG0OcVdmEVcTfyR/XSEWC5u16EBNvRnNAOAvZYUdWqVyQvXsjnxQot8KcK0QP8iHpoL/1dbdRy2opRPQ2FdZpovUgknybq/6FkeDtW7uCQ6Mvu4QxcUa3+WP9nYHKtgWip/eFxpeb+qLvcLHf1h0JXtxLVdyy6OLk3f2JRYUX2ZZVDvG3biTpeJz6iRzjGg6MfGxXZHjI8weDjXrJwIDAQABAoIBAGiPedJDwXg9d1i7mCo0OY8z1qPeFh9OGP/Zet8i9bQPN2gjahslTNtK07cDC8C2aFRz8Xw3Ylsk5VxdNobzjFPDNUM6JhawnvR0jQU5GhdTwoc5DHH7aRRjTP6m938sRx0VrfZwfvJAB09Z4jHX7vyjfvprH9EH8GQ2L5lACtfnsSASVJB77H1vtgxTnum74CSqIck1MCjPD/TVUtYfMJwkUQWcbk79N4nvnEoagqsDrvw4okU2OYMWucQjyxfWTU4NGlsDScRbdDAb8sLr3DpMfXM8vpZJ3Ed6gfw14hEJym8XoHwDHmjGmgYH9iG6MODxuO5TLRmRR6b+jcUV/2kCgYEA4WGsDUO/NIXIqtDm5lTi5qeFl0sGKIgRLGuCrvjLF0Fq5Yx28wuow3OhZ3rbjlmhf9nUt24nUUY67plv2pi+vx3kVdbcNfk+Wkc0wfx8+U91qaTplMRhNjrnq/Kp9E7xtnzZRInpUG1Ha5ozTYobVvklUvjodFlF2c16Zz2X2AMCgYEA9RSeZm7oMyJbe985SScXruwt5ZXlUBoBLDZAeMloPpaqknFmSVSNgtniywztF8HppJQyiMvmUOUL2tKnuShXwsvTkCTBC/vNGXutiPS8O2yqeQ8dHoHuKcoMFwgajrbPrVkuFtUkjbQJ/TKoZtrxUdCryDZ/AHmRtiHh9E4NUQ0CgYAE7ngvSh4y7gJ4Cl4jCBR26492wgN+e4u0px2S6oq3FY1bPHmV09l7fVo4w21ubfOksoV/BgACPUEo216hL9psoCDQ6ASlgbCllQ1IeVfatKxka+FYift+jkdnccXaPKf5UD4Iy+O5CMsZRaR9u9nhS05PxHaBpTpsC5z0CVr7NQKBgQCsBTzpSQ9SVNtBpvzei8Hj1YKhkwTRpG8OSUYXgcbZp4cyIsZY0jBBmA3H19rSwhjsm9icjAGs5hfcD+AJ5nczEz37/tBBSQw8xsKXTrCQRUWikyktMKWqT1cNE3MQmOBMHDxtak2t6KDaR6RMDYE0m/L3JMkf3DSaUk323JIcQQKBgD6lHhw79Cenpezzf0566uWE1QF6Sv3kWk6Gkzo2jUGmjo2tG1v2Nj82DvcTuqvfUKSr2wTKINxnKGyYXGto0BykdxeFbR04cNcBB46zUjasro2ZCvIoAHCpohNBI2dL6dI+RI3jC/KY3jPNI0toaOTWkeAvJ7w09G2ttlv8qLNV\n-----END RSA PRIVATE KEY-----'res=dc.get_domain_connect_template_sync_url(domain="signed.connect.domains",provider_id="exampleservice.domainconnect.org",service_id="template2",params={"IP":"132.148.25.185","RANDOMTEXT":"shm:1531371203:Hejo"},sign=True,private_key=priv_key,keyid='_dck1')print(res)exceptDomainConnectExceptionase:print('Exception: {}'.format(e))raise

自定义http/https代理或dns解析程序

fromdomainconnectimport*dc=DomainConnect(networkcontext=NetworkContext(proxy_host='proxy.host',proxy_port='proxy.port',nameservers='resolver.host'))

待办事项

  • 支持提供商名称(用于共享模板)
  • 异步还原

更改日志

versiondatechanges
0.0.62019-07-05UPDATE: moved from pycrypto to cryptography (due to know security issues)
0.0.52019-03-12NEW FEATURE: url signing capability added

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
SimpleDataFormat如何在Java中使用DateFormat解析月份完整格式字符串?   java如何使用JBPM引导规则创建规则流组?   java将SQL和应用程序服务器从Windows 2003迁移到Windows server 2012 R2   java游戏!Intellij IDEA中的2.0控制台无法工作   java如何获取线程内分配的变量值?   java Android翻译动画导致Clicklistener问题   当前平台不支持java桌面API   java删除hashmap条目的方法是什么   用Spring MVC提供Java模型的RDF表示?   JAVA未安装Java的计算机上的lang.UnsupportedClassVersionError   java SQLite从3个表中获取使用组合的对象列表   来自的TLS握手错误的java云数据流BQ输出挂起作业   java如何使用SPARQL进行排名?   java如何在Netbeans 7.1.2中设置${user}的值?   java如何删除括号内的字符串?