gpt4 book ai didi

python - 使用 request() 发布数据时出现异常 "A JSONObject text must begin with ' {' at character 0 of"

转载 作者:行者123 更新时间:2023-11-30 22:44:31 25 4
gpt4 key购买 nike

我计划使用以下代码向服务器发送请求。我花了 1 天多的时间来解决这个问题,但没有任何进展。请原谅我因为公司安全政策而不得不隐藏真实的 URL 地址。

import requests

get_ci = requests.session()

get_ci_url = 'https://this_is_a_fake_URL_to_paste_in_stackoverflow.JSON'
get_ci_param_dict = {"Username": "fake","Password": "fakefakefake","CIType": "system","CIID": "sampleid","CIName": "","AttrFilter": "","SubObjFilter": ""}
get_ci_param_str = str(get_ci_param_dict)

print(get_ci_param_dict)
print(get_ci_param_str)

get_ci_result = get_ci.request('POST', url=get_ci_url, params=get_ci_param_str, verify=False)

print(get_ci_result.status_code)
print(get_ci_result.text)

我在运行结果中得到的是,

C:\Python34\python.exe C:/Users/this/is/the/fake/path/Test_02.py
{'CIID': 'sampleid', 'CIType': 'system', 'AttrFilter': '', 'Password': 'fake', 'CIName': '', 'Username': 'fake', 'SubObjFilter': ''}
{'CIID': 'sampleid', 'CIType': 'system', 'AttrFilter': '', 'Password': 'fake', 'CIName': '', 'Username': 'fake', 'SubObjFilter': ''}
C:\Python34\lib\requests\packages\urllib3\connectionpool.py:843: InsecureRequestWarning: Unverified HTTPS request is being made. Adding certificate verification is strongly advised. See: https://urllib3.readthedocs.io/en/latest/advanced-usage.html#ssl-warnings
InsecureRequestWarning)
500
<ns1:XMLFault xmlns:ns1="http://cxf.apache.org/bindings/xformat"><ns1:faultstring xmlns:ns1="http://cxf.apache.org/bindings/xformat">*org.codehaus.jettison.json.JSONException: A JSONObject text must begin with '{' at character 0 of* </ns1:faultstring></ns1:XMLFault>

Process finished with exit code 0

更多提示,

  1. 我已经联系了服务器代码开发人员 - 他们只需要一个以“参数”方式发送的 JSON 格式的字符串。这意味着在 request() 中使用 params 是正确的。

  2. 我尝试过 dumps.json(get_ci_param_dict) => 相同的结果。

  3. 当我只请求服务器的root时,它返回了200代码, 这证明我的网址没问题。

<小时/>

params更新为data时的附加日志。

C:\Python34\lib\requests\packages\urllib3\connectionpool.py:843: InsecureRequestWarning: Unverified HTTPS request is being made. Adding certificate verification is strongly advised. See: https://urllib3.readthedocs.io/en/latest/advanced-usage.html#ssl-warnings
InsecureRequestWarning)
500
<html><head><title>Apache Tomcat/7.0.61 - Error report</title><style><!--H1 {font-family:Tahoma,Arial,sans-serif;color:white;background-color:#525D76;font-size:22px;} H2 {font-family:Tahoma,Arial,sans-serif;color:white;background-color:#525D76;font-size:16px;} H3 {font-family:Tahoma,Arial,sans-serif;color:white;background-color:#525D76;font-size:14px;} BODY {font-family:Tahoma,Arial,sans-serif;color:black;background-color:white;} B {font-family:Tahoma,Arial,sans-serif;color:white;background-color:#525D76;} P {font-family:Tahoma,Arial,sans-serif;background:white;color:black;font-size:12px;}A {color : black;}A.name {color : black;}HR {color : #525D76;}--></style> </head><body><h1>HTTP Status 500 - 1</h1><HR size="1" noshade="noshade"><p><b>type</b> Exception report</p><p><b>message</b> <u>1</u></p><p><b>description</b> <u>The server encountered an internal error that prevented it from fulfilling this request.</u></p><p><b>exception</b> <pre>java.lang.ArrayIndexOutOfBoundsException: 1
com.fake.security.XSSHttpReuquestWrapper.GeneralParameters(XSSHttpReuquestWrapper.java:158)
com.fake.security.XSSHttpReuquestWrapper.checkParameter(XSSHttpReuquestWrapper.java:101)
com.fake.security.XSSHttpReuquestWrapper.validateParameter(XSSHttpReuquestWrapper.java:142)
com.fake.security.XSSSecurityFilter.doFilter(XSSSecurityFilter.java:35)
com.fake.webservice.interceptor.GetContextFilter.doFilter(GetContextFilter.java:24)
org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:88)
org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)
</pre></p><p><b>note</b> <u>The full stack trace of the root cause is available in the Apache Tomcat/7.0.61 logs.</u></p><HR size="1" noshade="noshade"><h3>Apache Tomcat/7.0.61</h3></body></html>

Process finished with exit code 0
<小时/>

此问题的最终解决方案

@e4c5您的建议有助于找出最终的解决方案。 param 应通过 data 发送到服务器,因为 data 应按照官方文档中的定义以 dict 或 byte 形式发送,因此需要使用 param 作为要发送的字典键。请看下面的代码,

import requests
import json


get_ci_url = 'https://sample.fake.com:0000/sample/fake/fakeagain.JSON'
get_ci_param_dict = {"Username": "fake","Password": "fakefake".......}
get_ci_param_json = json.dumps(get_ci_param_dict)

params = {'param': get_ci_param_json}

get_ci_result = requests.request('POST', url=get_ci_url, data=params, verify=False)

print(get_ci_result.status_code)
print(get_ci_result.text)

根本原因:param 应通过data 参数发送。官方文档明确指出 => :param data: (可选) 在 :class:Request 正文中发送的字典、字节或类似文件的对象。

感谢我的同事 - Mr.J 和 @e4c5 的大力帮助。

最佳答案

如果你的服务器期望的是json,你应该在python请求中使用json参数

get_ci_result = get_ci.request('POST', url=get_ci_url,  
json=get_ci_param_dict, verify=False)

另请注意,params 参数通常与 get 一起使用(用于格式化 URL 的查询字符串),对于 post 和表单数据,它应该是 data 又是一本字典。

更多信息请参阅:http://docs.python-requests.org/en/master/api/

关于python - 使用 request() 发布数据时出现异常 "A JSONObject text must begin with ' {' at character 0 of",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41500646/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com