0

要件は、特定の JSON ペイロードを使用して特定の URL に POST 要求を行うことです。URL は、ペイロードが正しく、リクエストが 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[] に変換されるため、文字列として解析しています。

何が起こっているのか本当に理解できないので、どんな洞察も非常に役に立ちます。前もって感謝します

編集: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'),
    )
4

2 に答える 2

0

問題は、Grinder がポートにアクセスできなかったことです。JSONとは関係ありませんでした。ポート 6443 で実行される URL が問題で、Grinder はそれにアクセスできませんでした (理由はわかりません)。URL 自体をデフォルトのポート 8080 で実行するように変更したところ、すぐにスクリプトが機能しました。助けてくれてありがとう!

于 2016-09-28T05:28:57.077 に答える
0

最良の推測?プロキシ/ファイアウォール/アクセス ゲートをアプリケーションに渡すための資格情報を含むヘッダーが欠落している可能性があります。REST クライアント (DHC) はこの追加データを渡している可能性がありますが、グラインダーはそうではありません。プロキシ (Fiddler、Charles など) を取得し、DHC から宛先へのハンドシェイクをチェックしてから、それを Grinder と照合します。私の推測では、あなたはデルタを見つけるでしょう。

于 2016-09-16T13:34:13.143 に答える