मैं एक त्वरित स्क्रिप्ट लिखने की कोशिश कर रहा हूं जो 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}