【问题标题】:@ value of POST variable in PHP CURL@PHP CURL 中 POST 变量的值
【发布时间】: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


【解决方案1】:

某些字符不允许出现在字符串中。为避免此类问题,您可以在使用 curl 函数之前对数据使用 http_build_query

【讨论】:

    猜你喜欢
    • 2018-02-16
    • 1970-01-01
    • 2018-11-22
    • 1970-01-01
    • 2017-03-04
    • 1970-01-01
    • 1970-01-01
    • 2020-12-11
    • 1970-01-01
    相关资源
    最近更新 更多