【问题标题】:Converting wp_remote_post() to cURL将 wp_remote_post() 转换为 cURL
【发布时间】:2018-11-08 17:24:56
【问题描述】:

我有这个 WordPress 代码使用 wp_remote_post() 对 LinkedIn 进行 API 调用。

    $args = array(
                'headers' => array('Content-Type' => 'text/xml'),
                'body' => "<?xml version='1.0' encoding='UTF-8' standalone='yes'?><company><id>{$nCompanyID}</id></company>"
            ); 
    $access_token = $datapass->access_token_get();                    
    $params = array('oauth2_access_token' => $access_token); 
    $resource = "https://api.linkedin.com/v1/people/~/following/companies?" . http_build_query($params);        
    $response = wp_remote_post( $resource, $args); 
    $code = $response['response']['code'];
    $body = wp_remote_retrieve_body($response);
    $RV = ($code == '201');
    return $RV;  

它有效。现在,我需要将其转换为 php cURL。 我尝试了各种我在网上找到的 php cURL 发布 XML 的示例,但没有运气。 这是最新的尝试。

$access_token = "long_string_of_characters";
$nCompanyID = 2495437;
$xml = "<?xml version='1.0' encoding='UTF-8' standalone='yes'?><company><id>{$nCompanyID}</id></company>";
$url = 'https://api.linkedin.com/v1/people/~/following/companies?oauth2_access_token='.$access_token;

$headers = array(
    "Content-type: text/xml",
    "Content-length: " . strlen($xml)
);

$ch = curl_init(); 
curl_setopt($ch, CURLOPT_URL,$url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, array('body' => $xml));
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
$data = curl_exec($ch); 

$data 返回 400 错误和消息说“意外元素:CDATA”。如果我从CURLOPT_POSTFIELDS 中删除数组并仅使用$xml,则$data 将作为空字符串返回。

我们将不胜感激。

【问题讨论】:

  • @miken32 是的,您的回答很有帮助。谢谢!很抱歉长时间延迟将其标记为已接受

标签: php wordpress curl


【解决方案1】:

如果服务器期待一个 XML POST,那么将一个数组传递给 CURLOPT_POSTFIELDS 不会让服务器满意。

在您的原始代码中注意构建 URL 的方法:

$params = array('oauth2_access_token' => $access_token); 
$resource = "https://api.linkedin.com/v1/people/~/following/companies?" . http_build_query($params);        

你会想要保留它。如果您的访问令牌包含特殊字符,http_build_query() 会执行所需的转义。

我对您的访问令牌是否有效有疑问,因为原始代码似乎是使用 $datapass-&gt;access_token_get(); 动态生成的

否则看起来你的所有设置都是一样的。

<?php
$access_token = "long_string_of_characters";
$nCompanyID   = 2495437;
$xml          = "<?xml version='1.0' encoding='UTF-8' standalone='yes'?><company><id>$nCompanyID</id></company>";
$params       = ["oauth2_access_token" => $access_token]; 
$url          = "https://api.linkedin.com/v1/people/~/following/companies?";
$url         .= http_build_query($params);

$headers = [
    "Content-type: text/xml",
    "Content-length: " . strlen($xml)
];

$ch = curl_init(); 
curl_setopt_array($ch, [
    CURLOPT_URL            => $url,
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_POST           => true,
    CURLOPT_POSTFIELDS     => $xml,
    CURLOPT_HTTPHEADER     => $headers,
]);
$data = curl_exec($ch); 

【讨论】:

    猜你喜欢
    • 2021-10-05
    • 1970-01-01
    • 2021-08-09
    • 1970-01-01
    • 2015-03-11
    • 2015-10-02
    • 2017-06-05
    • 2016-01-08
    • 2018-03-28
    相关资源
    最近更新 更多