2013-04-16 49 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

相关问题