【发布时间】:2018-06-17 21:27:51
【问题描述】:
我有一个针对我公司的arcGIS's generateToken query 的功能性 AJAX 查询,如下所示:
var u = "CENTRAL\\myusername";
var p = "myp@ssword";
var payload = {
username: u,
password: p,
client: 'referer',
referer: 'https://mycompany.com/myapp',
expiration: '60',
format: 'json',
};
var tokenUrl = 'https://gis.mycompany.com/public/tokens/generateToken';
$.ajax({
url: tokenUrl,
type: "POST",
crossDomain: true,
dataType: 'text',
data: payload,
success: function(data){
token = data;
console.log(token)
}
});
我需要将其重写为我的 PHP 后端 - 但是,curl_getinfo 说我有一个 HTTP200 但$result 始终是
请求无效 用法:https://gis.mycompany.com/arcgis/tokens?request=gettoken&username=username&password=password& 用法:https://gis.mycompany.com/arcgis/tokens/generateToken?username=username&password=password& 用法:https://gis.mycompany.com/arcgis/tokens/gettoken.html
从端点。这是我的实现:
$GISuser = "CENTRAL\\myusername";
$GISpassword = "myp@ssword";
$GISurl = "https://gis.mycompany.com/public/tokens/generateToken";
$payload = array(
"username" => $GISuser,
"password" => $GISpassword,
"client" => "referer",
"referer" => 'https://mycompany.com/myapp',
"expiration" => "60",
"format" => "json"
);
$curl = curl_init();
curl_setopt($curl, CURLOPT_POST, 1);
curl_setopt($curl, CURLOPT_POSTFIELDS, $payload);
curl_setopt($curl, CURLOPT_URL, $GISurl);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
$result = curl_exec($curl);
curl_close($curl);
echo $result;
AJAX 和 CURL Web API 查询之间是否存在差异,我缺少这些查询以使其正常工作?
【问题讨论】:
-
嗯。也许我也忽略了一些东西......但这看起来应该有效。但是你说API服务器说请求不好?这是 API 错误,还是服务器错误?你能粘贴完整的
curl_error($curl)吗? -
如果我不得不猜测,我会说尝试添加一个用户代理字符串。这将由进行 ajax 调用的浏览器设置,但不一定由 curl 设置
-
更新了我的问题 - 根据
curl_getinfo和curl_error似乎我确实得到了HTTP200 是空的。$result贴在上面。 -
您可以尝试将
$payload包装在curl_setopt($curl, CURLOPT_POSTFIELDS, http_build_query($payload));... 因为传递数组可能会将 enctype 更改为多部分(*注意:将数组传递给 CURLOPT_POSTFIELDS 会将数据编码为多部分/form-data,同时传递 URL 编码的字符串会将数据编码为 application/x-www-form-urlencoded。) -
@IncredibleHat 就是这样,谢谢!如果您做出回答,我将投票并接受!
标签: javascript php ajax curl arcgis-js-api