2013-04-18 3 views
3

FluidSurvey API를 호출하려고합니다. POST 요청을 할 때 ... fluidSurvey에 요청을 게시하지만 JSON 응답을받지 못했습니다. 오히려 아무것도 반환하지 않습니다. 어떠한 제안??POST 요청이 Salesforce에 JSON 응답을받을 수 없습니다.

내 컨트롤러 코드

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: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> 

과 API 문서 링크는 여기에 ..

+1

적어도 하나는 얻습니까? 적어도 상태 또는 코드가 있으면 게시하십시오. 첫 번째 제안은 20000으로 시간 제한을 늘리는 것입니다. –

+1

아니요. 아무 것도 얻지 못했습니다. 시간 제한을 늘 렸습니다.하지만 문제가 있습니다. – WiXXeY

+0

디버그는 무엇이라고 말합니까? 조사 할 수 있도록 여기에 모든 디버그를 게시 할 수 있습니까? 나는 무엇인가 말해야한다. 그냥 조용히 충돌하거나 뭔가 다른 것을 할 수는 없습니다 ... –

답변

1

내 코드의 문제점은 콘텐츠 길이 헤더를 설정했지만 몸체를 설정하지 않았기 때문에 서버가 3199 바이트 본문을 열렬하게 기다리고 있다는 것입니다. 그래서 setBody 메서드를 사용한 후 내 코드가 json 응답을 제대로 반환합니다.

+0

당신이 setbody에 넣은 것을 말해 줄 수 있습니까? –

4

FluidSurveys 데브 http://docs.fluidsurveys.com/api/surveys.html#getting-a-list-of-surveys입니다.

당신이 새로운 응답을 생성하기위한 문서에 따르면 POST 요청을하는 것처럼 보입니다. 하지만 함수의 이름은 getData이므로 응답 목록을 얻고 싶다고 가정하고 있습니까?

요청 유형을 GET에서 POST로 변경하면 작동하기 시작해야합니다.

또한 응답 유형은 application/json이지만 요청 유형을 해당 인코딩으로 설정하면 안됩니다.

내가 실수로 새로운 응답을 제출하려는 경우 실제로 콘텐츠를 전달하지 않으므로이 코드는 작동하지 않습니다. http://docs.fluidsurveys.com/api/surveys.html#submitting-a-new-response으로 볼 수 있듯이 실제로 질문 ID와 답변 사전을 전달해야합니다. ID가 무엇인지 형식이 무엇인지 알아내는 가장 좋은 방법은 먼저 GET 요청에서 리턴 된 응답을 보는 것입니다.

0

외부 종료점에 게시되는 Apex의 일부 메시지가 침입으로 인해 다른 쪽 끝에있는 방화벽에 의해 삭제되는 것을 발견했습니다. 탐지 규칙.

Apex 끝에서 아웃 바운드 메시지가 중간자 공격을 막는 특정 구성 규칙을 준수하지 않고 일부 방화벽이나 IDS가이를 차단하고있는 것으로 보입니다. 이것은 Apex 측에 "Read Time Out"으로 나타납니다.

특정 IDS 규칙은 CVE-2009-3555 (http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2009-3555)입니다.

Apex에서 외부 끝점으로 읽기 타임 아웃이 발생하여이를 apex 프로그래밍으로 격리 할 수없는 경우 대상 방화벽에서 일부 로깅을 수행하여 이것이 문제인지 아닌지 확인하고 예외가 발생하면 예외를 생성합니다 이런 경우에 해당 방화벽에서

관련 문제