2013-06-18 9 views
2

Я пытаюсь перевести команду curl в команду wp_remote_request.
Вот локон команда:curl command to wp_remote_request command

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 тела. Не уверен, что метод автоматически делает это или что (кажется странным, что он будет). Удалите json_encode из переменной body и он должен работать.