Post request from drupal 8 (Guzzle)



我正在尝试从Drupal到Redmine Api发送json的post请求。但是当我尝试它时,我得到一个错误。

要发送的数据:

$rawdata = '{
    "issue": {
      "project_id": 85,
      "subject": "Test from drupal",
      "priority_id": 4
    }
 }';
$data = json_encode($rawdata);

Post请求:

$request = Drupal::httpClient()->post($url,array(
      'headers' => array(
                  'Accept' => 'application/json',
                  'Content-type' => 'application/json',
                  'X-Redmine-API-Key' => $this->apiKey),
        ));
    $request->setBody($data); 
    $response = $request->send($request);

出现的错误如下:

[:error] [pid 8316] [client XXX.XXX.XXX.XXX] FastCGI: server "/usr/lib/cgi-bin/php5-fcgi_xxxx" stderr: PHP message: Uncaught PHP Exception GuzzleHttp\Exception\ClientException: "Client error: 422" at dir/to/project/vendor/guzzlehttp/guzzle/src/Middleware.php line 69, referer: http://url-from-project/create

我对错误进行了研究,似乎在标题中存在内容类型的问题。但是,如果我尝试发送不带报头选项的请求,则出现与身份验证相关的401客户端错误。

应该是这样的:

 $request = Drupal::httpClient()->post($url,array(
        'Accept' => 'application/json',
        'Content-type' => 'application/json',
        'X-Redmine-API-Key' => $this->apiKey,
        ));

然后抛出这个错误:

[:error] [pid 8159] [client XXX.XXX.XXX.XXX] FastCGI: server "/usr/lib/cgi-bin/php5-fcgi_xxxx" stderr: PHP message: Uncaught PHP Exception GuzzleHttp\Exception\ClientException: "Client error: 401" at /dir/to/project/vendor/guzzlehttp/guzzle/src/Middleware.php line 69, referer: http://website.com/create

谁有什么提示?

我对此很纠结。

首先,我不建议手动输入JSON并尝试转换它。其次,看起来您正在无缘无故地转换JSON字符串。只需要发送字符串本身。格式将无效的方式,您发送它。

最新更新