2017-12-29 24 views
0

VBA의이 측면을 활용하는 데있어 새로운 점을 지적하여 게시물을 소개하겠습니다.VBA HTTP 게시 요청에 매개 변수 추가

개인적으로 부여한 인증 코드를 사용하여 HTTP "POST"요청을해야하는 웹 서비스에서 토큰을 요청하는 데 관심이 있습니다. 내 요청에있는 다른 매개 변수 중이 코드를 포함 할 필요가 있지만 성공적으로 그렇게 고심하고 있습니다.

POST /services/oauth2/token HTTP/1.1 
Host: "YourURL.com" 
grant_type=authorization_code&code=aPrxsmIEeqM9PiQroGEWx1UiMQd95_5JUZ 
VEhsOFhS8EVvbfYBBJli2W5fn3zbo.8hojaNW_1g%3D%3D&client_id=3MVG9lKcPoNI 
NVBIPJjdw1J9LLM82HnFVVX19KY1uA5mu0QqEWhqKpoW3svG3XHrXDiCQjK1mdgAvhCs 
cA9GE&client_secret=1955279925675241571& 
redirect_uri=https%3A%2F%2Fwww.mysite.com%2Fcode_callback.jsp 

이 개인적으로 진짜 투쟁을 계속 것처럼 요청을 생산 : 내가 발견 한 세부 사항은 온라인으로 다음과 같이 자바에서 자신의 요구 (모든 ID가 위조되는)를 포맷합니다.

Dim request As WinHttp.WinHttpRequest 
Dim 
    client_id, 
    redirect_uri, 
    grant_type, 
    client_secret, 
    authcode, 
    result, 
    token_url, 
As String 

하위 testmod()

Set request = New WinHttp.WinHttpRequest 
client_id = "MyClientID" 
client_secret = "MyClientSecret" 
grant_type = "authorization_code" 
redirect_uri = "MyRedirectURI" 
authcode = "MyAuthorizationCode" 
token_url = "MyTokenURL" <--- No specified query string appended 

With request 
    .Open method:="POST", Url:=token_url 
    ''''Including POST Params with Send method'''' 
    .Send ("{""code"":" & authcode & 
    ",""grant_type"":authorization_code,""client_id"":" & client_id & 
    ",""client_secret"":" & client_secret & ",""redirect_uri"":" & 
    redirect_uri & "}") 
    ''''This returns error code 400 denoting a bad request'''' 
    Debug.Print .StatusText 
end with 

최종 하위

이러한 매개 변수에 오류가이 요청을 일으키는 이유에

어떤 아이디어 : 다음은 내 코드 관련 구성 요소는? 어떤 통찰력이라도 대단히 감사합니다!

+0

예쁜 확실히 POST 요청 본문은'{ '와'}'당신이 가진 것을하지 말았어야 : 당신이 게시하고있는 서버에 따라

, 당신은 같은 헤더를 설정해야 할 수도 있습니다 처음과 끝에서 키 이름을 둘러싸고있는 리터럴 이중 따옴표''' – garbb

+0

또한 HTTP 요청/응답으로 장난하는 사람이 [피들러] (https : //www.telerik.com/fiddler) 내가 무슨 일이 일어나고 있는지를 알면 도움이된다. – garbb

답변

0

요청의 몸은 구조해야 할 수 있습니다 :

Dim Payload as string 

Payload = "grant_type=" & "authorization_code" & _ 
"&code=" & "BLAHBLAHBLAH" & _ 
"&client_id=" & "OFMICEANDMEN" & _ 
"&client_secret=" & "MELOVEYOULONGTIME" & _ 
"&redirect_uri=" & "YOUMAYHAVETOUSELOOPBACKADDRESSIFYOUHAVENOREDIRECTURL" 

내가 위 넣어 한 쓰레기 매개 변수 값의 각 (자신과 교체 될거야) URL 전에 인코딩해야 전송 중에 변경/손상되지 않도록 요청을 보냅니다. 일부 값은 URL 인코딩을하기 전에 base64로 인코딩해야 할 수도 있습니다. 서버가 base64로 인코딩 할 것으로 예상되는 것을 알고 싶다면 API 문서를 참조하십시오 ('code'값은 base64로 인코딩 된 다음 URL 인코딩 됨).

다음 URL을 통해 최신 Excel 버전에서 URL 인코딩을 수행 할 수 있습니다. Application.Encode (StringToURLEncode) : URL 안전 문자열을 반환합니다.

Base64 인코딩은 기능을 만들어 수행 할 수 있습니다. 이 사이트에서 base64 인 코드 vba를 검색하면 바로 사용할 수있는 예제가 많이 있습니다.

Dim WebClient as WinHttp.WinHttpRequest 
Set Webclient = new winhttp.winhttprequest 

With webclient 
.open "POST", " YOURURL.COM", False 
.setrequestHeader "Content-Type", "application/x-www-form-urlencoded" 
.send Payload 
.waitforresponse 
Debug.print .responsetext 
End with