我正面临以下问题: 在加载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);
}
}
答案 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();