我试图通过ajax使用POST请求访问另一个站点。所以访问流程变成了:
AJAX -> PHP CURL -> www.somedomain.com
这是AJAX请求的代码。我保证它正确地传递参数:$("#new_access_token").submit(function(ev){
$.ajax({
url : "back_access/access_code.php",
type : "POST",
data: "access_token[app_id]=601&access_token[subscriber_num]="+$("#input-phone-number").val(),
success : function(res){
console.log(res);
}
});
return false;
});
curl脚本在这里(access_code.php):
$ch = curl_init();
$url = "http://developer.globelabs.com.ph/oauth/request_authorization";
$data = array("access_token" => array(
'app_id' => $_POST['access_token']['app_id'],
'subscriber_number' => $_POST['access_token']['subscriber_number']
));
curl_setopt($ch,CURLOPT_URL,$url);
curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
curl_setopt($ch, CURLOPT_POSTFIELDS,$data);
$result = curl_exec($ch);
print_r($result);
curl_close($ch);
返回错误"500"。使用终端curl和Advanced Rest Client中的正确参数,它将返回页面。然而,这个脚本没有。如何控制参数?
因为你是张贴多维数组,所以你必须手动构建POST字符串,而不是传递整个数组..你应该添加curl头与表单类型multipart和其他相关的accept
, content-length
等
curl_setopt($ch, CURLOPT_HTTPHEADER, array("Content-type: multipart/form-data"));
如果你序列化或json_encode整个字段,你可以发送数据,但在这种情况下,你还需要捕获数据和反序列化/json_decode它从服务器端