2013-04-16 52 views
3

我試圖訪問Salesforce中的流體調查API。我使用下面的代碼,但它響應一個錯誤。System.CalloutException:對於輸入字符串:「[email protected]」

的控制器類的代碼是:

public class fluidSurvey{ 
    public String tst{set;get;} 
    public String result{get;set;} 

    public PageReference chk() { 

     //if (!ApexPages.hasMessages()) 
      result=getData(); 

     return null; 
    } 
public String getData() 
    { 
     HttpRequest req= new HttpRequest(); 
     Http http = new Http(); 
     req.setMethod('GET'); 
     String url = 'https://username:[email protected]/api/v2/surveys/'; 
     req.setEndpoint(url); 
     HttpResponse res = http.send(req); 
     String json = res.getBody().replace('\n',''); 
     tst = json; 
     try { 
      JSONObject j = new JSONObject(json); 
      return parseJson(j); 
     } catch (JSONObject.JSONException e) { 
      return 'Error parsing JSON response from Google: '+e; 
     } 

    } 

    public String parseJson(JSONObject resp){ 
     String detail =resp.getString('total'); 

     return detail; 
    } 
} 

和頂點頁面的代碼是:

<apex:page controller="fluidSurvey"> 
    <!-- Begin Default Content REMOVE THIS --> 
    <h1>Fluid Survey</h1> 
    <apex:form > 
     <apex:outputText value="{!tst}"></apex:outputText> 
     <apex:commandButton value="Submit" action="{!chk}"/> 
    </apex:form> 
</apex:page> 

但是當我點擊提交按鈕就創建了以下錯誤:

System.CalloutException: For input string: "[email protected]" 
Error is in expression '{!chk}' in component <apex:page> in page fluid-page 
+0

您已經添加了「fluidsurveys.com」到(代碼允許將消息發送到端點)遠程站點的列表?你可以在安裝程序搜索中找到它。 – eyescream

+1

是的,我爲它創建了一個遠程站點 – WiXXeY

+0

您可以請發佈調試輸出嗎? –

回答

4

您需要明確設置授權標頭。

試試下面的代碼:

public String getData() 
{ 
    HttpRequest req= new HttpRequest(); 
    Http http = new Http(); 
    req.setMethod('GET'); 
    String authString = 'username:password'; 
    String url = 'https://app.fluidsurveys.com/api/v2/surveys/'; 
    req.setEndpoint(url); 

    req.setHeader('Authorization', 'BASIC ' + EncodingUtil.base64Encode(Blob.valueOf(authString))); 

    HttpResponse res = http.send(req); 
    String json = res.getBody().replace('\n',''); 

    try { 
     JSONObject j = new JSONObject(json); 
     return parseJson(j); 
    } catch (JSONObject.JSONException e) { 
     return 'Error parsing JSON response from Google: '+e; 
    } 
} 
+0

Thanx爲您的迴應哥們..我已經Coded它一樣的方式,因爲你提到,它適用於我.... – WiXXeY

0

我不相信你可以使用用戶名:密碼@主機格式在URL中傳遞驗證信息Cal最後,你必須在你的請求中明確設置一個Authentication HTTP頭來傳遞憑證。 (具體做法取決於服務器支持的認證類型)

+0

感謝您的回覆,這可能是一個可能的原因,因爲fluidsurvey在oAuth 2.0上工作,但我在瀏覽器中檢查了該URL,並且工作正常,它生成了json輸出。所以這就是爲什麼我這樣試試 – WiXXeY

相關問題