将 JavaScript AJAX Web API 查询转换为 PHP CURL
Converting JavaScript AJAX Web API query to PHP CURL
我有一个针对我公司 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
总是
Invalid request
Usage: https://gis.mycompany.com/arcgis/tokens?request=gettoken&username=username&password=password&
Usage: https://gis.mycompany.com/arcgis/tokens/generateToken?username=username&password=password&
Usage: 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 查询之间有区别吗?
您可以尝试将 $payload
换行为:
curl_setopt($curl, CURLOPT_POSTFIELDS, http_build_query($payload));
...因为传递数组可以将 enctype 更改为您的 API 不喜欢的多部分。
来自 PHP 页面:
*注意:将数组传递给 CURLOPT_POSTFIELDS 会将数据编码为 multipart/form-data,而传递 URL 编码的字符串会将数据编码为 application/x-www-form-urlencoded.
我有一个针对我公司 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
总是
Invalid request Usage: https://gis.mycompany.com/arcgis/tokens?request=gettoken&username=username&password=password& Usage: https://gis.mycompany.com/arcgis/tokens/generateToken?username=username&password=password& Usage: 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 查询之间有区别吗?
您可以尝试将 $payload
换行为:
curl_setopt($curl, CURLOPT_POSTFIELDS, http_build_query($payload));
...因为传递数组可以将 enctype 更改为您的 API 不喜欢的多部分。
来自 PHP 页面: *注意:将数组传递给 CURLOPT_POSTFIELDS 会将数据编码为 multipart/form-data,而传递 URL 编码的字符串会将数据编码为 application/x-www-form-urlencoded.