2016-09-16 4 views
0

必須のJSONペイロードを使用して特定のURLにPOSTリクエストを行う必要があります。ペイロードが正しければ、リクエストはPOST経由である場合にのみ、URLは応答します。JSONデータをグラインダーで送信するときのPOSTエラー

これは私のコードです:

request1 = HTTPRequest() 
control = HTTPPluginControl.getConnectionDefaults() 
httpUtilities = HTTPPluginControl.getHTTPUtilities() 
control.setProxyServer("proxy.example.com", 1234) 

payload = JSONObject({ 
    "uaaURL": "https://com-example.something.com", 
    "sampleID": "admin", 
    "sampleSecret": "password", 
    "sampleID2": "example-sample-el", 
    "sampleSecret2": "ssenjsoemal/+11=", 
    "username": "test", 
    "someAttributes": { 
    "Groups": [ 
     "example_com-abc" 
    ], 
    "attribute": [ 
     "value1" 
    ] 
    } 
}) 
payload = str(payload) 

url = "https://example-something.com:6443/getvalues" 
headers = [ 
    NVPair('Content-Type', 'application/json'), 
    NVPair('Charset', 'UTF-8'),] 

class TestRunner: 
    def __call__(self): 
     result = request1.POST(url, payload, headers) 
     print payload, headers 

さて、これで問題は私のPOSTリクエストが私に禁じ403を与えることです。ただし、同じペイロードを使用してDHCを使用してリクエストを送信すると、200になります。そのため、接続するペイロードとリンクがわかります。プロキシも別のスクリプトでテストしてうまくいきます。また、プロキシが機能しない場合、私は403を取得しません。 最後に、POSTは2番目の引数が内部的にbyte []に​​変換される文字列でなければならないので、これを文字列として解析しています。

私は本当に何が起こっているのか理解できないので、どんな洞察も非常に役立つでしょう。事前に感謝

EDIT:DHCの要求

POST https://example-something.com:6443/getvalues HTTP/1.1 
Host: example-something.com:6444 
Connection: keep-alive 
Content-Length: 688 
Origin: chrome-extension://aejoelaoggembcahagimdiliamlcdmfm 
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.116 Safari/537.36 
Content-Type: application/json 
Accept: */* 
Accept-Encoding: gzip, deflate, br 
Accept-Language: en-US,en;q=0.8 

{ 
       "uaaURL": "https://com-example.something.com", 
       "sampleID": "admin", 
       "sampleSecret": "password", 
       "sampleID2": "example-sample-el", 
       "sampleSecret2": "ssenjsoemal/+11=", 
       "username": "test", 
       "someAttributes": { 
           "Groups": [ 
            "example_com-abc" 
           ], 
           "attribute": [ 
            "value1" 
           ] 
       } 
} 

のフィドラーズ・キャッチ私もそう

headers = (
    NVPair('Content-Type', 'application/json'), 
    NVPair('Charset','UTF-8'), 
    NVPair('Accept', '*/*'), 
    NVPair('Accept-Encoding', 'gzip, deflate, br'), 
    NVPair('Accept-Language', 'en-US,en;q=0.8'), 
    NVPair('Connection', 'keep-alive'), 
    ) 

答えて

0

問題は、Grinderがポートにアクセスできないという問題でした。それはJSONとは関係ありませんでした。ポート6443で動作するURLが問題で、Grinderがアクセスできない(理由を知らない)私は自分自身のURLをデフォルトのポート8080で実行するように変更し、即座にスクリプトが機能しました。助けてくれてありがとう!

0

ベストの推測に私のグラインダーリクエストヘッダを編集しましたか?プロキシ/ファイアウォール/アクセスゲートをアプリケーションに渡すために、いくつかの資格情報を含むヘッダがない可能性があります。あなたのRESTクライアント、DHCは、この追加データを渡している可能性がありますが、グラインダーはありません。プロキシ(Fiddler、Charlesなど)をつかみ、DHCから目的地までの握手をチェックして、それをGrinderと合わせます。私の推測では、あなたはデルタを見つけるでしょう。

+0

アイデアありがとう。 Fiddlerを使用して同じことをしていますが、結果を正確に理解することはできません。 Fiddlerでは、リクエストがDHC経由で行われると、FiddlerはURLへのトンネルと「getvalues」という関数へのhttps呼び出しの2つを取得します。また、2回目のhttps呼び出しでは、POSTデータが表示されます。しかし、グラインダの要求に対しては、グラインダが動作しているマシンのIPへの/ script/api/validateコールが1つ表示され、200 OKとして表示されます。生コラムでは、それはログボックスに結果の粉砕機のショーを表示します。私の要求データ、またはそのことについて403を見ることができません。 –

+0

つまり、私はDHCのウェブサイトへの要求をはっきりと見ることができます。しかし、グラインダーの反応しか見ることができません。私はそれをプロキシ経由で送っていたのだと思っていましたが、その行を削除しても、グラインダの応答以外は何も見ることができませんでした。 –

+0

何らかの理由で、ご要望にリンゴ/タンジェロがあります。グラインダーから来るものはDHCのものと一致しません。 DHCリクエストをグラインダテストコードに変換して一致させることを検討しましたか? –

関連する問題