2017-05-17 8 views
0

私はhttps://login.eloqua.com/auth/oauth2/tokenエンドポイントにPOST要求を行うことにより、アクセストークン更新トークンを取得しようとしています。エロクアOAuth 2.0のPOST要求リターン411応答コード

Authenticate Using OAuth 2.0」文書(リソースオーナーパスワード資格フローgrant flow)に続きました。

私は次のコードを試しましたが、 "conn.getInputStream()"(コンテンツ長の問題)の時に応答コードが411として返されています。私はすでにコンテンツの長さを追加しました。

import java.io.BufferedReader; 
import java.io.InputStream; 
import java.io.InputStreamReader; 
import java.net.HttpURLConnection; 
import java.net.URL; 
import java.nio.charset.StandardCharsets; 
public class EloquaOath2App { 
    public static void main(String[] args) { 


    String siteName = "MarketingCloud08"; 
    String username = "myAccountUsername"; 
    String password = "myPassword"; 
    String uri = "https://login.eloqua.com/auth/oauth2/token"; 
    String client_id = "my-app-client-id"; 
    String client_secret = "my-app-client-secret"; 

    String authString = client_id + ":" + client_secret;// format is client_id:client_secret 
    String headerAuthorization = "Basic " + javax.xml.bind.DatatypeConverter.printBase64Binary(authString.getBytes()); 
    String userAndSite = siteName + "\\" + username; 

    String response = null; 
    try { 
     URL url = new URL(uri); 
     HttpURLConnection conn = (HttpURLConnection) url.openConnection(); 
     conn.setRequestMethod("POST"); 

     conn.setRequestProperty("Content-Type", "application/json"); 
     conn.setRequestProperty("Authorization", headerAuthorization); 
     conn.setRequestProperty("grant_type", "password"); 
     conn.setRequestProperty("scope", "full"); 
     conn.setRequestProperty("username", userAndSite); // The user’s sitename and username in the form sitename + '/' + username 
     conn.setRequestProperty("password", password); 

     byte[] postData = uri.getBytes(StandardCharsets.UTF_8); 
     int postDataLength = postData.length; 
     System.out.println("postDataLength  :" + postDataLength); 

     if (postDataLength > 0) { 
      // In case that the content is not empty 
      conn.setRequestProperty("Content-Length", Integer.toString(postDataLength)); 
     } else { 
      // In case that the content is not empty 
      conn.setRequestProperty("Content-Length", "0"); 
     } 

     conn.setDoOutput(true); 

     InputStream is = conn.getInputStream(); 

     BufferedReader rd = new BufferedReader(new InputStreamReader(is)); 

     String line; 
     while ((line = rd.readLine()) != null) { 
      response += line; 
      System.out.println(response); 
     } 
     rd.close(); 
     conn.disconnect(); 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
    } 
} 

例外ログは次のとおりです。

java.io.IOException: Server returned HTTP response code: 411 for URL: https://login.eloqua.com/auth/oauth2/token 
    at sun.net.www.protocol.http.HttpURLConnection.getInputStream0(HttpURLConnection.java:1876) 
    at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1474) 
    at sun.net.www.protocol.https.HttpsURLConnectionImpl.getInputStream(HttpsURLConnectionImpl.java:254) 
    at com.nextrow.aem.eloquaconnector.core.models.EloquaOath2Test.main(EloquaOath2App.java:61) 

予想される出力は次のようになります:

{ 
    "access_token":"2YotnFZFEjr1zCsicMWpAA", 
    "token_type":"bearer", 
    "expires_in":3600, 
    "refresh_token":"tGzv3JOkF0XG5Qx2TlKW" 
} 

私を案内して、この上のご提案/答えを提案してください。

はあなたが読む前に、接続に何かを記述する必要が

Arpit

答えて

0

、ありがとうございます。

conn.getOutputStream().write(postData); 

また、httpヘッダーではなく、要求本体としてgrant_type、scopeなどを渡す必要があることにも注意してください。郵便配達員などを使用して、いくつかのテストリクエストを作成してAPIを休止させます。

関連する問題