我正在编写一个WordPress插件,它使用WP_HTTP进行API调用。
代码如下:
$request = new WP_Http;
$headers = array(
'Content-Type: application/x-www-form-urlencoded', // required
'accesskey: abcdefghijklmnopqrstuvwx', // required - replace with your own
'outputtype: json' // optional - overrides the preferences in our API control page
);
$response = $request->request('https://api.abcd.com/clients/listmethods', array( 'sslverify' => false, 'headers' => $headers ));
但我得到的响应为“406 Not Acceptable”。
当我尝试将cURL用于上述请求时,请求成功。
答案 0 :(得分:4)
406错误表示Web服务可能无法识别您的Content-Type标头,因此它不知道它响应的格式。您的$headers
变量应该是一个关联数组,如下所示:
$headers = array(
'Content-Type' => 'application/x-www-form-urlencoded',
'accesskey' => 'abcdefghijklmnopqrstuvwx',
'outputtype' => 'json');
或看起来像原始标题的字符串(包括换行符),如下所示:
$headers = "Content-Type: application/x-www-form-urlencoded \n
accesskey: abcdefghijklmnopqrstuvwx \n
outputtype: json";
WP_Http类会将原始标题字符串转换为关联数组,因此您在名义上最好只是首先将它传递给数组。
答案 1 :(得分:0)
我知道这个答案很晚,但肯定能帮助别人。
WP_Http函数应该像下面那样使用
$url = http://your_api.com/endpoint;
$headers = array('Content-Type: application/json'//or what ever is your content type);
$content = array("first_name" => "Diane", "last_name" => "Hicks");
$request = new WP_Http;
$result = $request->request( $url, array( 'method' => 'POST', 'body' => $content, 'headers' => $headers) );
if ( !is_wp_error($result) ) {$body = json_decode($result['body'], true);}
请参阅http://planetozh.com/blog/2009/08/how-to-make-http-requests-with-wordpress/了解更多信息。