Проблемы с Python при отправке XML в теле и параметрах при использовании POST - PullRequest
0 голосов
/ 08 ноября 2019

код оболочки с curl XML-данными и параметрами, отправляемыми в API, является примером кода

https://si.chinanetcenter.com/v2/index/#/apidoc/apiDetail?docId=1026&classify=Report_flow

#!/bin/bash
username="example_username"
apiKey="example_apiKey"
date=`env LANG="en_US.UTF-8" date -u "+%a, %d %b %Y %H:%M:%S GMT"`
password=`echo -en "$date" | openssl dgst -sha1 -hmac $apiKey -binary | openssl enc -base64`
curl -i --url "https://open.chinanetcenter.com/api/report/domainflow?datefrom=2017-11-07T00:00:00%2B08:00&dateto=2017-11-07T00:15:00%2B08:00&type=fiveminutes" \
-X "POST" \
-u "$username:$password" \
-H "Date: $date" \
-H "Accept: application/json" \
-d '<?xml version="1.0" encoding="utf-8"?>
<domain-list>
  <domain-name>www.example1.com</domain-name>
</domain-list>
'

запись в python3 ..

код Python

import requests
import datetime
import hmac
import hashlib
import base64
username = "example_username"
apiKey= 'example_apiKey'
now = datetime.datetime.now()
nowTime = now.strftime('%a, %d %b %Y %H:%M:%S GMT')
nowTime_bytes = bytes(nowTime, encoding='utf-8')
value = hmac.new(apiKey, nowTime_bytes, hashlib.sha1).digest()
token = base64.b64encode(value).rstrip()
headers = {"Accept": "application/json",
           "Date": nowTime}
url = 'https://open.chinanetcenter.com/api/report/domainflow'
payload= {'datefrom':'2017-11-07T00:00:00%2B08:00',
          'dateto':'2017-11-07T00:15:00%2B08:00',
          'type': 'fiveminutes'}
xml = '<?xml version="1.0" encoding="utf-8"?>
 <domain-list>
   <domain-name>www.example1.com</domain-name>
 </domain-list>
 '

r = requests.post(url, headers=headers, auth=(username, token), data=xml,params=payload)
print (r)

шоу 400

1 Ответ

0 голосов
/ 09 ноября 2019

изменение% 2B на + API прошло

import requests
import datetime
import hmac
import hashlib
import base64
username = "example_username"
apiKey= 'example_apiKey'
now = datetime.datetime.now()
nowTime = now.strftime('%a, %d %b %Y %H:%M:%S GMT')
nowTime_bytes = bytes(nowTime, encoding='utf-8')
value = hmac.new(apiKey, nowTime_bytes, hashlib.sha1).digest()
token = base64.b64encode(value).rstrip()
headers = {"Accept": "application/json","Date": nowTime}
payload= {'datefrom':'2017-11-07T00:00:00+08:00','dateto':'2017-11-07T00:15:00+08:00','type': 'fiveminutes'}
xml = '<?xml version="1.0" encoding="utf-8"?> <domain-list><domain-name>www.example1.com</domain-name></domain-list>'
r = requests.post(url, headers=headers, auth=(username, token), data=xml,params=payload)
print (r)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...