Session 会话id问题:vf和开发人员控制台的id不同

Session 会话id问题:vf和开发人员控制台的id不同,session,salesforce,apex-code,visualforce,apex,Session,Salesforce,Apex Code,Visualforce,Apex,我面临以下问题: 在加载visualforce页面时,我正在对内部salesforce页面进行http调用,但在这里我面临身份验证问题 若我从开发人员控制台运行相同的http调用,那个么我将获得成功的响应,但相同的代码不适用于visualforce页面。无法工作的原因是开发人员控制台中的会话id和visualforce域不同 对于获取会话id,我使用“UserInfo.getSessionId()” 我也尝试过{!$Api.Session_ID},但没有成功 我的控制器: public with

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

若我从开发人员控制台运行相同的http调用,那个么我将获得成功的响应,但相同的代码不适用于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);

    }
}

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

request.setHeader('Authorization','Bearer '+UserInfo.getSessionId());
您还需要在远程站点设置中将ap1.salesforce.com设置为端点


如果您是从Salesforce内部请求页面,则可以使用PageReference方法

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