2014-07-21 3 views
1

도메인 이름 등록을 위해 NameCheap의 API를 초기화 할 함수를 만들고 있습니다. 등록 프로세스가 순조롭게 진행되었으므로 적절한 DNS 호스트를 설정하려고합니다.@ PHP CURL의 POST 변수 값 @

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; 

} 
+1

Urlencode 및 urldecode를 사용 중일 수 있습니다. –

답변

0

일부 캐랙터는 문자열에 허용되지 않습니다. 이러한 문제를 방지하려면 컬 기능을 사용하기 전에 데이터에 http_build_query을 사용할 수 있습니다.