/ / क्लाउडफ़ेयर और अजगर अनुरोधों के साथ dns-over-https बनाने में असमर्थ - json, dns, pyonon-request

क्लाउडफ्लेयर और पायथन अनुरोधों के साथ डीएनएस-ओवर-https बनाने में असमर्थ - जेसन, डीएनएस, पायथन-अनुरोध

मैं एक त्वरित स्क्रिप्ट लिखने की कोशिश कर रहा हूं जो CloudFlare से HTTPS सार्वजनिक DNS सर्वर पर नए 1.1.1.1 DNS का उपयोग करके लुकअप को पूरा कर सकती है।

उनके डॉक्स को यहां देख रहे हैं https://developers.cloudflare.com/1.1.1.1/dns-over-https/json-format/ मुझे यकीन नहीं है कि मैं क्या गलत कर रहा हूं और मुझे 415 स्टेटस कोड (415 असमर्थित सामग्री प्रकार) क्यों मिल रहा है।

यहाँ मेरी स्क्रिप्ट है: #! / usr / bin / env अजगर आयात अनुरोध आयात json प्रिंट आयात से

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()

आउटपुट यहां है:

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

और json प्रतिक्रिया के लिए (उम्मीद है कि मुझे विश्वास है):

raise ValueError("No JSON object could be decoded")
ValueError: No JSON object could be decoded

कर्ल का उपयोग करना यह पूरी तरह से ठीक काम करता है।

बहुत धन्यवाद

उत्तर:

उत्तर № 1 के लिए 1

आपको JSON अनुरोध सेट नहीं करना चाहिए बिलकुलप्रतिक्रिया JSON का उपयोग करता है।

रखना application/dns-json ए में मूल्य ct पैरामीटर:

JSON प्रारूपित प्रश्नों को GET का उपयोग करके भेजा जाता हैनिवेदन। GET का उपयोग करके अनुरोध करते समय, DNS क्वेरी को URL में एन्कोड किया जाता है। T ct ’के अतिरिक्त URL पैरामीटर को MIME प्रकार (एप्लिकेशन / 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}