localhost中的以下代码工作正常,在服务器中它会引发错误[curl] 6: Couldn't resolve host 'identity.api.rackspacecloud.com'
$client = new Rackspace(Rackspace::UK_IDENTITY_ENDPOINT, array(
'username' => $username,
'apiKey' => $apiKey,
'ssl.certificate_authority' => false,
'curl.options' => array('debug' => true, CURLOPT_IPRESOLVE => CURL_IPRESOLVE_V4)
));
我ping服务器identity.api.rackspacecloud.com,它运行正常。我按照此文档尝试使用curl进行身份验证: http://docs.rackspace.com/servers/api/v2/cs-devguide/content/curl_authentication.html
这是我发送的请求:
curl -s https://lon.identity.api.rackspacecloud.com/v2.0/tokens -X 'POST' -d '{"auth":{"RAX-KSKEY:apiKeyCredentials":{"username":"xxxx", "apiKey":"yyyyyyyy"}}}' -H "Content-Type: application/json" | python -m json.tool
返回结果。
但是当我运行php代码时,它会抛出错误..请指导我找到问题。
修改
$data_string = '{"auth":{"RAX-KSKEY:apiKeyCredentials":{"username":"xxxxxxx", "apiKey":"yyyyyyyyyy"}}}';//json_encode($data);
$ch = curl_init('https://lon.identity.api.rackspacecloud.com/v2.0/tokens');
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data_string);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
'Content-Type: application/json',
'Content-Length: ' . strlen($data_string))
);
echo $result = curl_exec($ch);
if(curl_errno($ch)){
echo 'Curl error: ' . curl_error($ch);
}
我在本地以及服务器和本地测试上面的代码,它工作正常,但不是在实时。更改CURLOPT_SSL_VERIFYPEER
TRUE和FALSE。什么都行不通。
注意:
操作系统:CentOS
答案 0 :(得分:1)
添加Google DNS名称服务器,解决了这个问题。
在服务器中,/ etc / resolv.conf中定义的名称服务器是
nameserver 83.138.151.80
nameserver 83.138.151.81
这是英国 Rackspace 的推荐名称服务器。
所以命令提示符中的curl工作,但不能在php中工作。所以我决定添加谷歌DNS。现在/etc/resolv.conf就像这样:
nameserver 83.138.151.80
nameserver 83.138.151.81
nameserver 8.8.8.8
一切正常......