无法使用cloudflare和python请求进行dns-over-https

时间:2018-04-03 16:49:52

标签: json dns python-requests

我正在尝试编写一个快速脚本,可以使用CloudFlare中的新的1.1.1.1 DNS over HTTPS公共DNS服务器进行dns查找。

在这里查看他们的文档https://developers.cloudflare.com/1.1.1.1/dns-over-https/json-format/我不确定我做错了什么以及为什么我会收到415状态代码(415不支持的内容类型)。

这是我的脚本:     #!/ usr / bin / env python     导入请求     导入json     来自pprint import pprint

C TABLE 
----------------------------------------------------
ID_A VARCHAR FOREIGN KEY references A(id_A) PRIMARY KEY
ID_B VARCHAR FOREIGN KEY references B(id_B) PRIMARY KEY
DATE_OP DATE NOT NULL

这是输出:

url = 'https://cloudflare-dns.com/dns-query'
client = requests.session() 

json1 = {'name': 'example.com','type': 'A'}

ae = client.get(url, headers = {'Content-Type':'application/dns-json'}, json = json1)


print ae.raise_for_status()
print ae.status_code

print ae.json()

client.close()

和json的回应(我相信):

    raise HTTPError(http_error_msg, response=self)
requests.exceptions.HTTPError: 415 Client Error: Unsupported Media Type for url: https://cloudflare-dns.com/dns-query

使用curl,这非常好用。

非常感谢

1 个答案:

答案 0 :(得分:3)

您不应该设置JSON请求 响应使用JSON。

application/dns-json值放在ct参数中:

  

使用GET请求发送JSON格式的查询。使用GET发出请求时,DNS查询将编码到URL中。 “ct”的附加URL参数应指示MIME类型(application / dns-json)。

GET请求永远不会有正文,所以不要尝试发送JSON:

params = {
    'name': 'example.com',
    'type': 'A',
    'ct': 'application/dns-json',
}
ae = client.get(url, params=params)

演示:

>>> import requests
>>> url = 'https://cloudflare-dns.com/dns-query'
>>> client = requests.session()
>>> params = {
...     'name': 'example.com',
...     'type': 'A',
...     'ct': 'application/dns-json',
... }
>>> ae = client.get(url, params=params)
>>> ae.status_code
200
>>> from pprint import pprint
>>> pprint(ae.json())
{'AD': True,
 'Answer': [{'TTL': 2560,
             'data': '93.184.216.34',
             'name': 'example.com.',
             'type': 1}],
 'CD': False,
 'Question': [{'name': 'example.com.', 'type': 1}],
 'RA': True,
 'RD': True,
 'Status': 0,
 'TC': False}