首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >POST请求无法在Salesforce中接收JSON响应

POST请求无法在Salesforce中接收JSON响应
EN

Stack Overflow用户
提问于 2013-04-18 19:47:59
回答 3查看 3.3K关注 0票数 3

我正在调用FluidSurvey的接口。当我发出POST请求时...它将请求发布到fluidSurvey上,但我没有得到JSON响应。相反,它不返回任何内容。有什么建议吗?

我的控制器代码

代码语言:javascript
复制
public class fluidSurvey{

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

public PageReference chk() {
    getData();
    return null;
}

public void getData(){
    String apiKey = 'xxxxxx';
    String pwd = 'xxxxxx';
    String u = 'https://app.fluidsurveys.com/api/v2/surveys/survey_id/responses/';

    HttpRequest req = new HttpRequest();
    Http http = new Http();
    HTTPResponse res;
    try{
        req.setEndPoint(u);
        req.setTimeout(2000);
        req.setMethod('POST');
        Blob headerValue = Blob.valueOf(apikey + ':' + pwd);
        String authorizationHeader = 'Basic '+ EncodingUtil.base64Encode(headerValue);
        req.setHeader('Authorization', authorizationHeader);
        req.setHeader('Content-Type', 'application/json');
        req.setHeader('Content-Length','31999');

        res = http.send(req); 
        tst= res.toString();



       catch(Exception e){
           System.debug('Callout error: '+ e);
           System.debug(tst+'--------'+res);
       }     
    }

}

Apex页面代码是

代码语言:javascript
复制
<apex:page controller="fluidSurvey">

<apex:form >
    <apex:pageBlock title="New Fluid Surveys API">
    <apex:outputText value="{!tst}"></apex:outputText><br/>
<apex:pageBlockButtons location="bottom">
    <apex:commandButton value="Submit" action="{!chk}"/>
</apex:pageBlockButtons>   
</apex:pageBlock>
</apex:form>

和应用程序接口文档链接是http://docs.fluidsurveys.com/api/surveys.html#getting-a-list-of-surveys

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-04-22 17:19:35

我的代码的问题是,我设置了一个content-length头部,但没有设置任何主体,服务器正在努力等待3199字节的主体。因此,在使用setBody方法之后,我的代码正确地返回了一个json响应

票数 1
EN

Stack Overflow用户

发布于 2013-04-19 22:46:01

这里是FluidSurveys Dev。

看起来你正在做一个POST请求,根据文档,这是为了创建一个新的响应。但是您的函数名为getData,所以我假设您想要获取响应列表?

将请求类型从GET更改为POST,它应该会开始工作。

此外,响应类型将是application/json,但是您不应该将请求类型设置为该编码。

如果我弄错了,你想提交一个新的响应,那么这个代码就不会工作,因为你实际上并没有传递任何内容。正如您在http://docs.fluidsurveys.com/api/surveys.html#submitting-a-new-response中看到的,您实际上需要传递一个包含问题ids和答案的字典。弄清楚is是什么或格式是什么的最好方法是首先查看从GET请求返回的响应。

票数 4
EN

Stack Overflow用户

发布于 2013-11-20 00:37:16

我想补充这个答案,因为我发现,由于入侵检测规则,来自Apex的一些发布到外部端点的消息正在被另一端的防火墙丢弃。

显然,在某些情况下,在Apex端,出站消息不符合防止中间人攻击的某些构造规则,并且一些防火墙或IDS正在阻止它们。这将在Apex端显示为"Read Time Out“。

具体的入侵检测系统规则是CVE-2009-3555 (http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2009-3555)。

如果您在Apex中遇到外部端点的读取超时,并且不能将它们隔离到顶点编程,则可以在目标防火墙上进行一些日志记录,以查看这是否是问题所在,如果是,则在该防火墙中为这种情况创建一个例外。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16082098

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档