如何修复python3中的HTTP错误400:错误请求



我试图使用它的API访问检查点防火墙,但由于某种原因,我收到了HTTP错误400:错误请求,我以前从未遇到过这种情况。有什么想法吗?这是我的代码:

import json
import ssl
import urllib.request, urllib.parse, urllib.error
import urllib.request, urllib.error, urllib.parse
import requests
from requests.packages.urllib3.exceptions import InsecureRequestWarning
requests.packages.urllib3.disable_warnings(InsecureRequestWarning)
sslctx = ssl.create_default_context()
sslctx.check_hostname = False
sslctx.verify_mode = ssl.CERT_NONE
def checkpoint_api_call(cp_ip, port, command, json_payload, sid):
apiurl = 'https://' + cp_ip + '/web_api/' + command
req = urllib.request.Request(apiurl)
if sid == '':
req.add_header('Content-Type', 'application/json')
else:
req.add_header('Content-Type', 'application/json')
req.add_header('X-chkp-sid', sid)
try:
data1 = urllib.parse.urlencode(json_payload).encode("utf-8")
resp = urllib.request.urlopen(req, data=data1, context=sslctx)
res_code = resp.getcode()
return resp_output, res_code
except urllib.error.HTTPError as e:
print((str(e)))
main()
payload = {'user': admin, 'password': password}
response, res_code = checkpoint_api_call(x.x.x.x, 443, 'login', payload, '')

基本上相同的事情是工作良好的python 2

这是python2代码

import ssl
import urllib
import urllib2
import requests
from requests.packages.urllib3.exceptions import InsecureRequestWarning
requests.packages.urllib3.disable_warnings(InsecureRequestWarning)
sslctx = ssl.create_default_context()
sslctx.check_hostname = False
sslctx.verify_mode = ssl.CERT_NONE
def checkpoint_api_call(cp_ip, port, command, json_payload, sid):
apiurl = 'https://' + cp_ip + '/web_api/' + command
jencode = json.dumps(json_payload)
resp_output = ""
req = urllib2.Request(apiurl)
if sid == '':
req.add_header('Content-Type', 'application/json')
else:
req.add_header('Content-Type', 'application/json')
req.add_header('X-chkp-sid', sid)
try:
resp = urllib2.urlopen(req, data=jencode, context=sslctx)
res_code = resp.getcode()
resp_output = json.load(resp)
return resp_output, res_code
except urllib2.HTTPError as e:
res_code = e.getcode()
print e.getcode()
return resp_output, res_code
main()
payload = {'user': user, 'password': password}
response, res_code = checkpoint_api_call(x.x.x.x, 443, 'login', payload, '') 

使用此

try:
jencode = json.dumps(json_payload)
jencode = jencode.encode("utf-8")
resp = urllib.request.urlopen(req, data=jencode, context=sslctx)
res_code = resp.getcode()
resp_output = json.load(resp)
return resp_output, res_code

最新更新