2

curl コマンドを wp_remote_request コマンドに変換しようとしています。
カールコマンドは次のとおりです。

curl -v 
-H "Accept:application/json" -H "Content-type:application/json" 
-X POST -d '{"user":{"password":"***","email":"***"}}'
http://***/users/sign_in.json

そして、ここに私のPHPがあります

$t = array(
     "user" => array(
               "password" => "***", 
               "email" => "***"));

$args = array (      
    'headers' => 
    array (
        'Accept'       => 'application/json',
        'Content-Type' => 'application/json',
    ),
    'method'    => 'POST',
    'body'      => json_encode( $t )
);

$response = wp_remote_request( 
           'http://***/users/sign_in.json' , $args );

問題は、それが機能しないことです。「本文」に入力した内容によって異なるエラーが発生しますが、通常は「404」だけです。私が考えることができる唯一のことは、curl -dが何らかの形でリクエストをエンコードしていることですが、その方法がわかりません。何かご意見は?ありがとう。

ところで、以下は問題なく動作しますが、やはり wp_remote_request を使用したいと思います

$t = array('user' => array('password' => '***',  
                           'email'    => '***'));
$curl = curl_init();

curl_setopt_array( $curl, array(
    CURLOPT_RETURNTRANSFER => 1,
    CURLOPT_URL => 'http://***/users/sign_in.json',
    CURLOPT_POST => 1,
    CURLOPT_POSTFIELDS => json_encode($t),
    CURLOPT_HTTPHEADER => array('Content-Type: application/json')
));

$resp = curl_exec( $curl );
curl_close( $curl );
4

2 に答える 2

0

本文を json_encode したくありません。メソッドが自動的にそれを行うかどうか、または何を行うかはわかりません(そうするのは奇妙に思えます)。body 変数から json_encode を削除すると、機能するはずです。

于 2016-12-02T16:28:35.143 に答える
0

昨夜 wp_remote_request と戦っていました。私の認証はヘッダーにあります.curl_setopt_arrayバージョンが機能したとあなたが言った場合、私たちの問題は異なりますが、コンテンツの長さを含めてみてください

$headers = array(
        'Authorization'  => 'Basic ' . base64_encode( $this->key.':'.$this->password ),
        'Accept'       => 'application/json',
        'Content-Type'   => 'application/json',
        'Content-Length' => strlen( json_encode($body) )
    );

    // Setup variable for wp_remote_post
    $post = array(
        'method'    => 'POST',
        'headers'   => $headers,
        'body'      => json_encode($body)
    );
于 2013-07-19T21:05:26.213 に答える