2016-09-16 9 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에서 내부적으로 byte []로 변환 할 문자열을 POST에 두 번째 문자열로 요구하기 때문에이를 문자열로 파싱합니다.

저는 어떤 일이 일어나고 있는지 이해할 수 없으므로 어떤 통찰력이라도 대단히 도움이 될 것입니다. 사전

편집에 감사 : 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

문제는 그라인더가 포트에 액세스 할 수 없다는 것이 었습니다. JSON과 아무 관련이 없습니다. 포트 6443에서 실행되는 URL이 문제 였고 그라인더가 액세스 할 수 없었습니다 (이유를 모르겠 음). 내 URL 자체가 기본 포트 8080에서 실행되도록 변경했으며 즉시 스크립트가 작동했습니다. 도와 주셔서 감사합니다!

0

추측? 응용 프로그램에 프록시/방화벽/액세스 게이트를 전달하기 위해 일부 자격 증명 정보가 포함 된 헤더가 누락되었을 수 있습니다. REST 클라이언트 인 DHC가이 추가 데이터를 전달하고 있지만 그라인더는 그렇지 않습니다. 프록시 (Fiddler, Charles 등)를 잡고 목적지까지 DHC의 핸드 셰이크를 확인한 다음 그라인더와 일치시킵니다. 내 생각 엔 델타를 찾을 수있을거야.

+0

아이디어를 제공해 주셔서 감사합니다. 피들러를 사용하여 동일하게하고 있지만 그 결과를 정확히 이해할 수는 없습니다. Fiddler에서 DHC를 통해 요청이 이루어지면 Fiddler는 url에 대한 터널과 "getvalues"함수에 대한 https 호출의 두 가지를 선택합니다. 두 번째 https 호출에서 POST 데이터가 표시됩니다. 그러나 분쇄기 요청에 대해서는 분쇄기가 실행중인 기계의 IP에 대한/script/api/validate 호출이 하나 표시되고 200 OK로 표시됩니다. 원시 열에서 로그 상자에 그라인더 결과가 표시됩니다. 내 요청 데이터 또는 심지어 그 문제에 대한 403을 볼 수 없습니다. –

+0

즉, DHC의 웹 사이트 요청을 명확하게 볼 수 있습니다. Grinder의 응답 만 볼 수 있습니다. 나는 그것이 대리인을 통해 그것을 보내고 있었기 때문에 나는 그 줄을 제거했기 때문에 그것이라고 생각했다. 그러나 나는 grinder의 반응 이외에 아무것도 볼 수 없다. –

+0

그래서 어떤 이유로 사과/tangelos가 요청에 있습니다. 그라인더에서 오는 것은 DHC의 것과 일치하지 않습니다. DHC 요청을 그라인더 테스트 코드로 변환하여 고려해 보셨습니까? –