Param verileriyle Python İstek Yazısı


150

Bir API çağrısı için ham istek budur:

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"}}"""

Bu istek başarılı (2xx) yanıt döndürüyor.

Şimdi bu isteği kullanarak göndermeye çalışıyorum 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]>

Her şey bana iyi görünüyor ve 400 yanıt almak için neyi yanlış gönderdiğimden emin değilim.

Yanıtlar:


262

paramsGET stili URL parametreleri içindir, dataPOST stili gövde bilgileri içindir. Bir istekte her iki bilgi türünü sağlamak tamamen yasaldır ve isteğiniz de bunu yapar, ancak URL parametrelerini zaten URL'ye kodladınız.

Ham yayınınızda JSON verileri var. requestssizin için JSON kodlamasını işleyebilir ve doğru Content-Headerda ayarlayacaktır ; tek yapmanız gereken JSON olarak kodlanacak Python nesnesine jsonanahtar kelime argümanına geçmek .

URL parametrelerini de ayırabilirsiniz:

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

ardından verilerinizi aşağıdakilerle birlikte yayınlayın:

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)

jsonAnahtar kelime yeni olan requestssürümü 2.4.2; hala eski bir sürüm kullanmanız gerekiyorsa, jsonmodülü kullanarak JSON'u manuel olarak kodlayın ve kodlanmış sonucu dataanahtar olarak kaydedin; bu durumda İçerik Türü başlığını açıkça ayarlamanız gerekir:

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

Verileri buna ayarlayın:

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

5
Verilerinden farklı olarak ne yaptığınızı kısaca açıklayın
Ayyan Khan

8

Yanıtı bir değere atayın ve özniteliklerini test edin. Bunlar size faydalı bir şey söylemelidir.

response = requests.post(url,params=data,headers=headers)
response.status_code
response.text
  • status_code, daha önce verdiğiniz kodu tekrar doğrulamalıdır, elbette

Daha önce denedim ve istek kimliği sözdizimsel olarak yanlış diyor.
slysid
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.