必須の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'),
)
アイデアありがとう。 Fiddlerを使用して同じことをしていますが、結果を正確に理解することはできません。 Fiddlerでは、リクエストがDHC経由で行われると、FiddlerはURLへのトンネルと「getvalues」という関数へのhttps呼び出しの2つを取得します。また、2回目のhttps呼び出しでは、POSTデータが表示されます。しかし、グラインダの要求に対しては、グラインダが動作しているマシンのIPへの/ script/api/validateコールが1つ表示され、200 OKとして表示されます。生コラムでは、それはログボックスに結果の粉砕機のショーを表示します。私の要求データ、またはそのことについて403を見ることができません。 –
つまり、私はDHCのウェブサイトへの要求をはっきりと見ることができます。しかし、グラインダーの反応しか見ることができません。私はそれをプロキシ経由で送っていたのだと思っていましたが、その行を削除しても、グラインダの応答以外は何も見ることができませんでした。 –
何らかの理由で、ご要望にリンゴ/タンジェロがあります。グラインダーから来るものはDHCのものと一致しません。 DHCリクエストをグラインダテストコードに変換して一致させることを検討しましたか? –