【发布时间】:2014-09-12 00:54:17
【问题描述】:
我正在创建一个函数来使用 NameCheap 的 API 来注册域名。注册过程顺利进行,现在我正在寻找设置正确的 DNS 主机。
当我使用 POSTMAN 之类的东西创建纯 POST 请求时,它可以正常工作并返回预期的 XML 响应。但是,当我尝试通过 PHP 的 CURL 函数传递数据时,它会中断。我已经缩小了需要传递给 DNS 主机的“@”符号的问题。如果我把其他任何东西放在那里,请求就会通过。我尝试对符号进行 url_encode,但 API 不接受。
有什么建议吗?
public function setDNSHost($name, $server){
list($domain,$tld) = explode('.',$name,2);
$request = $this->request_URL;
$curl = curl_init();
$args['ApiUser'] = $this->API_User;
$args['ApiKey'] = $this->API_Key;
$args['UserName'] = $this->API_User;
$args['Command'] = 'namecheap.domains.dns.setHosts';
$args['ClientIP'] = $this->Client_IP;
$args['SLD'] = $domain;
$args['TLD'] = $tld;
$args['HostName1'] = utf8_encode('@');
$args['RecordType1'] = 'A';
$args['Address1'] = $server;
$args['HostName2'] = 'www';
$args['RecordType2'] = 'CNAME';
$args['Address2'] = $name;
$args['HostName3'] = '*';
$args['RecordType3'] = 'CNAME';
$args['Address3'] = $name;
curl_setopt_array($curl, array(
CURLOPT_URL => $request,
CURLOPT_USERAGENT => 'API',
// CURLOPT_FAILONERROR => 1,
CURLOPT_FOLLOWLOCATION => 1,
CURLOPT_RETURNTRANSFER => 1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => $args,
CURLOPT_TIMEOUT => 15
));
$response = curl_exec($curl);
curl_close($curl);
// $oXML = new SimpleXMLElement($response);
return $response;
}
【问题讨论】:
-
Urlencode 和 urldecode 可能有用吗?
标签: php post curl special-characters symbols