を使用してデータを投稿したときに、私は次のコードでサーバーに要求を送信する予定です「JSONObjectテキストは、 『{』の文字0時で開始する必要があります」。私はこれを解決するために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
その他のヒント、
私はサーバーのコード開発に連絡していている - 彼らは唯一の必要がで 文字列です。 JSON形式は「パラメータ」形式で送信されます。それ が
request()
でparams
を使用することが正しいことを意味します。私は
dumps.json(get_ci_param_dict)
=>同じ結果で試してみました。サーバーのルートのみを要求すると、200コードが返されました。 は、私にURLがOKであることを証明しています。更新
params
data
へ
追加のログ。 e4c5あなたの提案@この質問
FOR
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
最終溶液は、最終的な解決策を見つけ出すことが有用です。 param
はdata
が公式文書で定義されている辞書やバイトとして送信するので、送信するために辞書のキーとしてparam
を使用する必要がありますする必要があるとして、data
を介してサーバに送信する必要があります。
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
の本文で送信する辞書、バイト、またはファイルのようなオブジェクトを明示しています。
おかげで私のcolleauge - Mr.Jとする@ e4c5の大きな助け。
どうもありがとうございました:
は、追加情報についてはを参照してください。しかし、質問自体のために。サーバは「JSON」を使用した場合に、要求に必要とされる「paramsは」私に言った別の例外を返され、前のデータ」を使用している場合1)私は「データ」と「JSON」の両方を使用することを試みたが、同じエラーに会っます。2)これは私のTIP1) - 「JSON形式の文字列を送る」と「params」で一貫しています。サーバ側の開発者が確認しました。 3)実際にはPOSTリクエストはサーバーからデータを取得していますが、SOAPUIを使用すると、 'params'で送信したものがクエリです。 –申し訳ありませんが、最初のコメントは削除する必要があります。私は 'Enter'ボタンを押してコメントを投稿するのではなく、2行目を開始しようとしていました。 :) –
いいえ、あなたは完全に誤解されたpython要求です。 paramsで送信されたものはサーバーのPOSTデータとして表示されません。あなたは自分自身でこれらの事実を確認するためのドキュメントを参照してください。 – e4c5