परम डेटा के साथ पायथन अनुरोध पोस्ट


150

यह एपीआई कॉल के लिए कच्चा अनुरोध है:

POST http://192.168.3.45:8080/api/v2/event/log?sessionKey=b299d17b896417a7b18f46544d40adb734240cc2&format=json HTTP/1.1
Accept-Encoding: gzip,deflate
Content-Type: application/json
Content-Length: 86
Host: 192.168.3.45:8080
Connection: Keep-Alive
User-Agent: Apache-HttpClient/4.1.1 (java 1.5)

{"eventType":"AAS_PORTAL_START","data":{"uid":"hfe3hf45huf33545","aid":"1","vid":"1"}}"""

यह अनुरोध एक सफलता (2xx) प्रतिक्रिया देता है।

अब मैं इस अनुरोध को पोस्ट करने की कोशिश कर रहा हूं requests:

>>> import requests
>>> headers = {'content-type' : 'application/json'}
>>> data ={"eventType":"AAS_PORTAL_START","data{"uid":"hfe3hf45huf33545","aid":"1","vid":"1"}}
>>> url = "http://192.168.3.45:8080/api/v2/event/log?sessionKey=9ebbd0b25760557393a43064a92bae539d962103&format=xml&platformId=1"
>>> requests.post(url,params=data,headers=headers)
<Response [400]>

मुझे सब कुछ ठीक लग रहा है और मुझे बिल्कुल यकीन नहीं है कि 400 की प्रतिक्रिया पाने के लिए मैंने क्या गलत पोस्ट किया है।

जवाबों:


262

paramsGET- शैली URL मापदंडों के dataलिए है, POST- शैली शरीर की जानकारी के लिए है। किसी अनुरोध में दोनों प्रकार की जानकारी प्रदान करना पूरी तरह से कानूनी है , और आपका अनुरोध भी ऐसा करता है, लेकिन आपने पहले ही URL में URL मापदंडों को इनकोड कर दिया है।

आपके कच्चे पोस्ट में JSON डेटा शामिल है । requestsआपके लिए JSON एन्कोडिंग को संभाल सकता है, और यह सही Content-Headerभी सेट करेगा ; आपको केवल jsonकीवर्ड तर्क में JSON के रूप में एन्कोड किया जाने वाला पायथन ऑब्जेक्ट पास करना होगा ।

आप URL पैरामीटर भी अलग कर सकते हैं:

params = {'sessionKey': '9ebbd0b25760557393a43064a92bae539d962103', 'format': 'xml', 'platformId': 1}

इसके बाद अपना डेटा पोस्ट करें:

import requests

url = 'http://192.168.3.45:8080/api/v2/event/log'

data = {"eventType": "AAS_PORTAL_START", "data": {"uid": "hfe3hf45huf33545", "aid": "1", "vid": "1"}}
params = {'sessionKey': '9ebbd0b25760557393a43064a92bae539d962103', 'format': 'xml', 'platformId': 1}

requests.post(url, params=params, json=data)

jsonकीवर्ड में नया है requestsसंस्करण 2.4.2; यदि आपको अभी भी एक पुराने संस्करण का उपयोग करना है, तो JSON को मैन्युअल रूप से jsonमॉड्यूल का उपयोग कर एन्कोड करें और एन्कोडेड परिणाम को dataकुंजी के रूप में पोस्ट करें ; आपको उस मामले में सामग्री-प्रकार के हेडर को स्पष्ट रूप से सेट करना होगा:

import requests
import json

headers = {'content-type': 'application/json'}
url = 'http://192.168.3.45:8080/api/v2/event/log'

data = {"eventType": "AAS_PORTAL_START", "data": {"uid": "hfe3hf45huf33545", "aid": "1", "vid": "1"}}
params = {'sessionKey': '9ebbd0b25760557393a43064a92bae539d962103', 'format': 'xml', 'platformId': 1}

requests.post(url, params=params, data=json.dumps(data), headers=headers)

12

इसके लिए डेटा सेट करें:

data ={"eventType":"AAS_PORTAL_START","data":{"uid":"hfe3hf45huf33545","aid":"1","vid":"1"}}

5
DO को संक्षेप में बताएं कि आपने उसके डेटा से अलग क्या किया है
अय्यन खान

8

एक मूल्य पर प्रतिक्रिया असाइन करें और इसकी विशेषताओं का परीक्षण करें। ये आपको कुछ उपयोगी बताना चाहिए।

response = requests.post(url,params=data,headers=headers)
response.status_code
response.text
  • status_code बस आपको उस कोड को फिर से जोड़ना चाहिए जो आपको पहले दिया गया था

मैंने कोशिश की कि पहले और यह कहता है कि आईडी का वाक्यविन्यास गलत है।
सलीसिड
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.