2014-12-23 3 views
1

스포티 파이 API에 대한 405 오류 제공 :컬 작동하지만 Jsoup 내가 명령 줄에서 아래 전화 사용하여 스포티 파이 웹 API에 대한 액세스 토큰을 얻기 위해이 URL을 곱슬 곱슬 수 있어요

curl -H "Authorization: Basic <Base64 client_id:client_secret>" -d grant_type=client_credentials https://accounts.spotify.com/api/token 

을 그리고 나는 응답을 얻을 the api_token.

Map<String, String> data = Maps.newHashMap(); 
data.put("grant_type", "client_credentials"); 

String clientCred = 
    new String(
     Base64.encodeBase64((CLIENT_ID + ":" + CLIENT_SECRET).getBytes())); 

String url = "https://accounts.spotify.com/api/token"; 

Document doc = Jsoup.connect(URIUtil.encodeQuery(url)) 
    .header("Accept-Language", "en") 
    .header("Authorization", "Basic " + clientCred) 
    .header("Content-Type", "application/x-www-form-urlencoded;charset=UTF-8") 
    .data(data) 
    .ignoreHttpErrors(true) 
    .header("Accept", 
     "text/html,application/xhtml+xml,application/xml;q=0.9" 
      + ",*/*;q=0.8") 
    .get(); 

내가 요청 매개 변수를 설정에서 뭔가 잘못하고 있습니까 : 나는 Jsoup을 통해 자바에서이 작업을 수행 할 때, 나는 405 오류가? 같은 HttpURLConnection도 동일한 요청 매개 변수를 사용하여 시도했지만 동일한 405 오류로도 실패합니다.

+0

리퍼러와 사용자 에이전트를 추가해보세요. – alkis

+0

나는 그것을 시도해도 작동하지 않았다. 위의 헤더를 제거하고 추가하려고했습니다. – Sap

답변

3

curl-d 플래그를 사용하면 실제로 POST을 보냈습니다. 을 Jsoup으로 설정하면 작동합니다.

그러나 서버가 Content-Type: application/json으로 응답하므로 Jsouporg.jsoup.UnsupportedMimeTypeException으로 불만을 제기합니다. 그런 다음 .ignoreContentType(true)을 추가해야합니다. 나는 키가 없기 때문에

Document doc = Jsoup.connect(url) 
     .header("Accept-Language", "en") 
     .header("Authorization", "Basic " + clientCred) 
     .header("Content-Type", "application/x-www-form-urlencoded;charset=UTF-8") 
     .data(data) 
     .ignoreHttpErrors(true) 
     .ignoreContentType(true) 
     .header("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9"+ ",*/*;q=0.8") 
     .post(); 

Bytheway, 나는이 {"error":"invalid_client"} 받고 있어요,하지만 난 당신이 잘 될 것 같아요 :

코드가 될 것이다.

도움이되기를 바랍니다.

+0

그래, 포스트 콜이 완벽하게 작동합니다. 고마워. 나는 Jsoup에 익숙하지 않고 언제 POST 호출을 할 것인지, GET 대 Jsoup.connect(). execute()를 사용하여 응답을받을지를 모른다. – Sap

+0

글쎄, POST 또는 GET을 사용하는 것은 Jsoup 문제가 아니며, 서버가 기대하는 것에 달려있다. 일반적으로 말하자면, 양식을 보내려는 경우 (해당되는 경우) 게시물을 작성하는 것이 좋습니다. 다른 한편으로, Jsoup의 execute를 사용하면 두 가지 HTTP 메소드 (get 및 post)를 만들 수 있지만 응답 내용 (상태 코드 및 응답 헤더 등) 이외에 더 많은 정보를 제공하는'Response' 객체도 제공합니다. . 자세한 내용은 JSoup 문서 (docs) (http://jsoup.org/apidocs/org/jsoup/Connection.html)를 참조하십시오. – fonkap