2

API呼び出しを行うためにWP_HTTPを使用するWordPressプラグインを書いています。

コードは次のとおりです。

$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 ));

しかし、「406NotAcceptable」という応答があります。

上記のリクエストにcURLを使用しようとすると、リクエストは成功しました。

4

2 に答える 2

5

The 406 error indicates the web service probably isn't recognizing your Content-Type header, so it doesn't know what format it's responding to. Your $headers variable should be an associative array, like this:

$headers = array(
  'Content-Type' => 'application/x-www-form-urlencoded', 
  'accesskey' => 'abcdefghijklmnopqrstuvwx',
  'outputtype' => 'json');

or a string that looks like a raw header (including newlines), like this:

$headers = "Content-Type: application/x-www-form-urlencoded \n 
  accesskey: abcdefghijklmnopqrstuvwx \n
  outputtype: json";

The WP_Http class will convert a raw header string into an associative array, so you're nominally better off just passing it an array in the first place.

于 2012-06-19T00:35:54.390 に答える
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/も参照してください。

于 2013-08-04T21:15:47.933 に答える