如何在 Salesforce 中构建正确的 HttpRequest

How to construct a correct HttpRequest in Salesforce

我正在 Salesforce 中开发一个应用程序,它应该与服务器通信以获取一些数据。服务器地址是这样的 http://192.168.115.22/.

这是我在 Apex 代码中构建的 HttpRequest 对象:

HttpRequest request = new HttpRequest();
String username = "myLogin", passwd = "myPassword";
String dataUrl = 'sli=on&fli=on&login=' + username + '&password=' + passwd + 'the rest of data';

request.setMethod('POST');
request.setEndpoint('http://192.168.115.22/Services/getLicenses');
request.setHeader('Content-Type','application/x-www-form-urlencoded');
request.setHeader('Content-Length', String.valueOf(dataUrl.length()));
request.setBody(dataUrl);

Http http = new Http();
HttpResponse response = http.send(request);

但我收到的响应包含此错误:

The following error was encountered while trying to retrieve the URL: http://192.168.115.22/Licgen/Service/getLicensePackage?

    Access Denied.

我不知道我正在构建的 url 有什么问题,当我在导航器中手动编写 url 时,我可以访问服务器。

请帮忙。

此问题可能与 Salesforce 阻止对未授权端点的外部调用这一事实有关。幸运的是,将端点添加到授权出站连接点的白名单中是一件简单的事情。

setup 菜单选项下,然后在 security 菜单下,有一个名为 remote site settings 的菜单项。在此选项中,您将看到允许您从 Salesforce 访问的站点列表。如果您的端点不在列表中,请添加它,您可能会得到不同的结果。

如果您已经将此添加到白名单并且仍然存在问题,请告诉我。

这个问题,鉴于已经添加到端点的白名单,我认为与 192.168 IP 地址通常表示网络中的本地 IP 地址有关。

很可能您可以访问它,因为您在您的网络中,但 Salesforce 无法从内部看到您的网络。您需要使用 ngrok.com 之类的东西,它允许您将本地机器暴露给外部可用的 IP 地址。

如果你在家,你也可以找到你的路由器的 IP 地址,并通过它转发到你的 192.168.115.22 本地机器以将它暴露给外界,但我有一个更容易的时间ngrok.com 便于与我的应用程序进行集成测试。

Some Information On 192.168 addresses

(添加此答案是因为我的其他答案可以合法地解决搜索上述相同问题的人)