2013-03-25 2 views
2

POST 요청을 보내고 액세스 토큰을 받아야합니다. HTTP 요청은 다음과 같이한다 : (나는 그것을 테스트 한 피들러에 따라) 그들이해야하기 때문에 나도 몰라HTTPS 요청의 올바른 형식

POST /oauth/token HTTP/1.1 
Host: api.quizlet.com 
Authorization: Basic c3ZWRUhNZVA0aDp3eS4yUXA0ZXNFY0xQUFl2WkRFTGpn 
Content-Type: application/x-www-form-urlencoded; charset=UTF-8 

grant_type=authorization_code&code=GENERATED_CODE 

, 어떻게, 내 요청에 "grant_type"과 "코드"를 보내 요청 본문에 내가 가진

코드는 다음과 같습니다

  client = new WebClient(); 
      client.Headers[HttpRequestHeader.Authorization] = "Basic " +  "MY_SECRET_CODE"; 
      client.Headers[HttpRequestHeader.ContentType] = "application/x-www-form-urlencoded"; 
      client.Headers[HttpRequestHeader.Host] = "api.quizlet.com"; 
      client.Headers[HttpRequestHeader.AcceptCharset] = "UTF-8"; 
      client.UploadStringCompleted += ClientOnUploadStringCompleted; 
      client.UploadStringAsync(tokenUrl, "POST",string.Format("grant_type={0}&code={1}", 
                HttpUtility.HtmlEncode("authorization_code"),HttpUtility.HtmlEncode(code))); 

을, BTW이 코드는 WP7에서 실행 내가 요청에서 제공하는 거의 2 일 해당 값이 단일 요청 덤비는되었습니다 100입니다 필자에게 샘플 요청을 붙여 넣으려고 시도했기 때문에 적절한 토큰을 받았습니다.

편집 :

string.Format("grant_type={0}&code={1}&redirect_uri={2}", 
      HttpUtility.HtmlEncode("authorization_code"),HttpUtility.HtmlEncode(code), HttpUtility.HtmlEncode("http://someurl.com")) 
+0

사이드 노트 : 당신 같은 (일반의 WinForm/콘솔 첫 번째 코드 및 디버그를 쓰기 쉽게 할 수있다 Fiddler를 사용하는 트래픽을 ph보다 Windows에서 훨씬 쉽게 가로 챌 수 있습니다. 하나)와 전화 포트 코드보다. –

+1

코드가 저에게 효과적입니다. 그게 효과가 없다고 생각하는 이유는 무엇입니까? – bmm6o

+0

도움을 주신 모든 분들께 감사 드리며, AcceptCharset 헤더를 적절한 양식으로 변경하고 WinForms에서 디버깅했습니다. 마지막으로, 호스트 헤더가 그것을 대체 했으므로 데이터에서 redirect_uri 매개 변수를 잊어 버렸습니다. 모든 것이 작동합니다. 감사합니다. – LadislavBohm

답변

0

적어도 하나의 문제가 보인다 내가 업로드하려고 데이터에 redirect_uri로 매개 변수를 잊고, 그래서 적절한 데이터 문자열이 다음과 같아야합니다 ... 작동하지 않았다 대상 서버에 설정 한 예상 문자는 AcceptCharset을의 ContentType 헤더에 설정되지해야 할 것을 :

  client.Headers[HttpRequestHeader.ContentType] = "application/x-www-form-urlencoded; charset=UTF-8"; 
      client.Headers[HttpRequestHeader.Host] = "api.quizlet.com"; 
      //client.Headers[HttpRequestHeader.AcceptCharset] = "UTF-8";