使用WordPress WP_HTTP时为什么会出现“406 Not Acceptable”?

时间:2012-06-14 10:25:34

标签: wordpress

我正在编写一个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用于上述请求时,请求成功。

2 个答案:

答案 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/了解更多信息。