2017-01-06 24 views
0

を使用してデータを投稿したときに、私は次のコードでサーバーに要求を送信する予定です「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 

その他のヒント、

  1. 私はサーバーのコード開発に連絡していている - 彼らは唯一の必要がで 文字列です。 JSON形式は「パラメータ」形式で送信されます。それ がrequest()paramsを使用することが正しいことを意味します。

  2. 私はdumps.json(get_ci_param_dict) =>同じ結果で試してみました。

  3. サーバーのルートのみを要求すると、200コードが返されました。 は、私にURLがOKであることを証明しています。更新paramsdata


追加のログ。 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 

最終溶液は、最終的な解決策を見つけ出すことが有用です。 paramdataが公式文書で定義されている辞書やバイトとして送信するので、送信するために辞書のキーとして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) 

根本的な原因として、以下のコードを参照してください:paramdataパラメータを経由して送信する必要があります。公式ドキュメントでは、=>:param data:(オプション):class:Requestの本文で送信する辞書、バイト、またはファイルのようなオブジェクトを明示しています。

おかげで私のcolleauge - Mr.Jとする@ e4c5の大きな助け。

答えて

2

JSONが何であるか、サーバーが期待する、あなたは

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

paramsパラメータは通常、getで使用されている(とのクエリ文字列をフォーマットするために使用されていることに注意してくださいPythonの要求にJSONパラメータを使用する必要がある場合URL)、投稿とフォームのデータはdataであり、もう一度辞書になる必要があります。 SOに私の第一の質問に答えるために、@ e4c5ためhttp://docs.python-requests.org/en/master/api/

+0

どうもありがとうございました:

は、追加情報についてはを参照してください。しかし、質問自体のために。サーバは「JSON」を使用した場合に、要求に必要とされる「paramsは」私に言った別の例外を返され、前のデータ」を使用している場合1)私は「データ」と「JSON」の両方を使用することを試みたが、同じエラーに会っます。2)これは私のTIP1) - 「JSON形式の文字列を送る」と「params」で一貫しています。サーバ側の開発者が確認しました。 3)実際にはPOSTリクエストはサーバーからデータを取得していますが、SOAPUIを使用すると、 'params'で送信したものがクエリです。 –

+0

申し訳ありませんが、最初のコメントは削除する必要があります。私は 'Enter'ボタンを押してコメントを投稿するのではなく、2行目を開始しようとしていました。 :) –

+0

いいえ、あなたは完全に誤解されたpython要求です。 paramsで送信されたものはサーバーのPOSTデータとして表示されません。あなたは自分自身でこれらの事実を確認するためのドキュメントを参照してください。 – e4c5

関連する問題