【发布时间】:2014-04-29 16:13:37
【问题描述】:
我试过搜索,其他答案对我没有帮助。
我正在尝试通过 cURL 发送 POST 数据,但它仅适用于 一些 服务器。是什么赋予了?
我试过了:
if (!empty($data) && $usePost) {
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
}
$data 包含一个数组,其键为 products,值为 JSON 字符串。
我也尝试过明确地使用查询:
if (!empty($data) && $usePost) {
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($data));
}
但是,接收服务器上的$_POST 仍然给了我NULL。
知道该怎么做吗?
这是整个方法:
public static function execCommand($command, $ch,$data=array(),$cookie_file='genCookie.txt', $usePost = false) {
$url = $command;
if (!empty($data) && !$usePost)
$url .= '?' . http_build_query($data);
elseif (isset($data['sessionid'])) {
$url .= '?sessionid=' . $data['sessionid'];
unset($data['sessionid']);
}
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie_file);
curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_file);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_FRESH_CONNECT, 1);
curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows NT 6.1; rv:21.0) Gecko/20100101 Firefox/21.0');
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
if (!empty($data) && $usePost) {
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
}
return curl_exec($ch);
}
我尝试回显$_REQUEST,所以它不在$_GET 中。我也试过file_get_contents('php://input'),但还是不行。
发送端和接收端都在 Apache 服务器上。
更重要的是,它在大多数服务器上工作,但只有一些忽略它。有没有更安全、更跨平台的方法来做到这一点?
【问题讨论】:
-
什么服务器? IIS? Apache HTTPD?
-
您可以粘贴完整的卷曲设置块吗?
-
已更新。双方都是Apache,代码在原题中
-
什么时候发生?当您更改客户端(存在此代码的服务器)或更改端点时? (接收帖子的服务器)?
-
请添加您在客户端接收/评估 $_POST 的方式。