Guzzle添加CSRF令牌

时间:2014-03-31 07:41:19

标签: php drupal token csrf guzzle

我正在尝试使用guzzle和restful webservices在drupal commerce中创建一个产品。

当我尝试创建新产品时,我使用以下过程:  1)以有权创建产品的用户身份登录(成功)  2)请求CSRF令牌(成功)  3)创建产品:哦哦!:客户端错误响应[状态代码] 401 [原因短语]未经授权:未授权访问此操作

现在我在做这个过程时通过海报(Firfox附加组件)。我可以成功地创建一个产品,但它总是让我无法访问此操作。

require 'guzzle.phar';
use Guzzle\Http\Client;
//EDIT:
use Guzzle\Plugin\Cookie\CookiePlugin;
use Guzzle\Plugin\Cookie\CookieJar\ArrayCookieJar;

$client = new Client('http://localhost:8888/drupal-test/');

//EDIT:
$cookiePlugin = new CookiePlugin(new FileCookieJar($cookie_file_name));
$client->addSubscriber($cookiePlugin);

//User login
$request = $client->post('my_services/user/login.json', null,
                    array(
                            'username' => 'its',
                            'password' => '****'
                    ));

$response_json = $response->getBody();
$session = $response_var->session_name . '=' . $response_var->sessid;

//Services CSRF token
$request = $client->get('services/session/token');
$response = $request->send();
$token = $response->getBody(TRUE);


//Create Product
$request = $client->post('my_services/product.json',
        array(
            'X-CSRF-Token' => $token,
         ),
        array(
            'sku' => 'guzzleproductadd10',
            'title' => 'guzzleproductadd10',
            'type' => 'product',
            'commerce_price_amount' => '200',
            'commerce_price_currency_code' => 'EUR'
        )
 );
//$request->addHeader('X-CSRF-Token', $token);
try {
     $response = $request->send();
} 
catch (Guzzle\Http\Exception\BadResponseException $e) {
    echo 'Uh oh!: ' . $e->getMessage();
}

我真的不明白我做错了什么。我登录后,将所需的变量添加到标题中。

泰!

编辑:解决方案请参阅评论。我调整了代码。

0 个答案:

没有答案