我以前从未使用过cURL而且遇到了问题。
我正在编写一个小的PHP脚本来与Dotcom Monitor's API
进行交互我正在使用他们的example code from here发出API请求,我已将其转换为此函数(在PHP类中):
private function Request($action, $method, $data)
{
/**
* Retrieves data from Dotcom Monitor API
* @param string $action - dynamic url part
* @param string $method - HTTP method POST/GET
* @param string $data - POST data, 'null' for GET request, json_encode() is called on this param
* @return stdClass object The response to the request
*/
// setting request url (merging "constant" and "dynamic" part)
$ch = curl_init($this->API_URL . $action);
// setting HTTP method
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, $method);
// return string
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
// ignoring SSL certificate
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
// Cookie management
curl_setopt($ch, CURLOPT_COOKIEFILE, 'cookie.txt');
curl_setopt($ch, CURLOPT_COOKIEJAR, 'cookie.txt');
// creating request header array
$headers = array('Content-Type: application/json');
// checking if 'POST' method
if($method === 'POST' && $data != null)
{
// encode input data to json
$data_string = json_encode($data);
// setting POST data
curl_setopt($ch, CURLOPT_POSTFIELDS, $data_string);
// setting content length header
array_push($headers, 'Content-Length: ' . strlen($data_string));
}
// setting headers
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
// making request
$result = curl_exec($ch);
// closing connection
curl_close($ch);
// returning deserialized json data as object
return json_decode($result);
}
我正在调用这样的函数:
$login = $this->Request('login', "POST", $this->$API_CREDENTIALS);
API的工作方式是,
cookie.txt
我在我自己的服务器上使用它,一切正常,我登录后,创建了cookie文件,后续调用API读取cookie并允许这些调用。
我可以在phpFiddle上运行它,一切都很完美(完全如上)。
然而,当我在我的工作服务器上上传完全相同的代码时,登录调用成功,但cookie.txt
未创建,这似乎无声地使所有API调用失败登录。
工作服务器:
非工作服务器:
答案 0 :(得分:1)
您需要定义此文件的完整(绝对)路径。
b=a
答案 1 :(得分:0)
在网络服务器具有写入权限的目录中提供cookies.txt的完整路径。例如/tmp/cookies.txt