2013-06-18 133 views
2

我正在尝试将curl命令转换为wp_remote_request命令。
这里是curl命令: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); 

回答

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

你不想要json_encode身体。不知道该方法是否会自动执行该操作或该操作(看起来很奇怪)。从body变量中删除你的json_encode,它应该可以工作。