Python 3.x 调用Web服务时,为什么我的curl请求有效而python3请求无效?

Python 3.x 调用Web服务时,为什么我的curl请求有效而python3请求无效?,python-3.x,web-services,curl,python-requests,Python 3.x,Web Services,Curl,Python Requests,因此,我有两个(我认为是)相同的web服务请求……一个来自工作的curl,另一个来自Python3 我不理解它们之间的区别,因为curl-one工作并返回预期的结果,而Python3-one返回500 HTTP状态码 我的curl调用如下: $ curl -d "{\"Service\": \"Activity\", \"Action\": \"GetDataHistory\",\"Data\": \"{'StartTime':'2019-08-20T13:00:00+00:00', 'EndT

因此,我有两个(我认为是)相同的web服务请求……一个来自工作的curl,另一个来自Python3

我不理解它们之间的区别,因为curl-one工作并返回预期的结果,而Python3-one返回500 HTTP状态码

我的
curl
调用如下:

$ curl -d "{\"Service\": \"Activity\", \"Action\": \"GetDataHistory\",\"Data\": \"{'StartTime':'2019-08-20T13:00:00+00:00', 'EndTime':'2019-08-20T13:10:00+00:00','GameId':'XXXXXXXX-YYYY-ZZZZ-AAAA-BBBBBBBBBBBB'}\"}" -v -H "Content-Type: application/json" -H "cache-control: no-cache" -H "username: someusrname" -H "password: $(echo $vlpasswd)" -X POST -k https://xxx.xxx.xxx.xxx/api/Service/Call | /c/Users/meacct/AppData/Local/Continuum/anaconda3/python -m json.tool 
我的Python3代码“应该”做同样的事情,如下所示:

import json
import requests as req
import urllib3

endpoint = 'https://xxx.xxx.xxx.xxx/api/Service/Call'

h = {'Content-Type': 'application/json',
           'cache-control': 'no-cache',
           'username': 'someusrname',
           'password':'das-passwd'
          }

d = {'Service': 'Activity', 
     'Action': 'GetDataHistory',
     'Data': 
     {
             "StartTime":"2019-08-20T13:00:00+00:00", 
             "EndTime":"2019-08-20T13:10:00+00:00",
             "GameId":"XXXXXXXX-YYYY-ZZZZ-AAAA-BBBBBBBBBBBB"
     }
}


# Shut up urllib3's warnings about an invaild SSL Certy.
urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)

session = req.Session()

try:
    res = session.post(url=endpoint, headers=h, data=d, verify=False)
except req.exceptions.SSLError:
    print("SSL Error")

print(res.status_code)

res.text
输出为:

500 
'{"Message":"An error has occurred."}'

为什么在看起来是完全相同的调用时会出现这种情况?

由于curl请求成功,这表明Python请求与服务器配置相反,存在错误


我建议您尝试使用,直接从curl请求生成Python请求,而不是跟踪问题。

有一个工具可以从curl请求创建代码,您尝试过吗@不可忍受的光明听起来很棒!