会话ID问题:vf和开发者控制台的不同ID

时间:2014-06-27 10:36:28

标签: session salesforce apex-code visualforce apex

我正面临以下问题: 在加载visualforce页面时,我正在对内部salesforce页面进行http调用,但在这里我面临身份验证问题。

如果我从开发者控制台运行相同的http callout,那么我得到了成功的响应,但是相同的代码不能与visualforce页面一起使用。不工作的原因是我在开发者控制台中的会话ID和visualforce域不同。

对于获取会话ID,我正在使用“UserInfo.getSessionId()”

我也试过{!$ Api.Session_ID}但没有工作

我的控制器:

public with sharing class HttpRequestForPage
{
   public HttpRequestForPage()
   {
       requestForPage('https://ap1.salesforce.com/home/home.jsp');
   }
   public void requestForPage(String pageUrl)
    { 
        HttpResponse responseOfPage;
        String responseString;
        HttpRequest request = new HttpRequest();
        request.setMethod('GET'); 
        request.setEndpoint('https://ap1.salesforce.com/home/home.jsp');
        request.setHeader('Cookie', 'sid='+UserInfo.getSessionId());

        try
        {
            responseOfPage = new Http().send(request);
        }
        catch(Exception e)
        {
            system.debug(e);
        }
        responseString = responseOfPage.getBody();
        System.debug(responseString=='+responseString);

    }
}

1 个答案:

答案 0 :(得分:0)

尝试使用授权标头,而不是为会话设置cookie。

request.setHeader('Authorization','Bearer '+UserInfo.getSessionId());

您还需要将ap1.salesforce.com设置为远程站点设置中的端点。


如果您要从Salesforce中请求页面,则可以使用PageReference getContent()方法。

PageReference home = new PageReference('https://ap1.salesforce.com/home/home.jsp');
blob homeblob = home.getContent();
string homeContent = homeblob.toString();