0

我正在尝试使用 Goutte 提交表单。该表单使用 jQuery 将表单序列化为 json 并发布到 url。提交后,它会更新浏览器的 cookie。

我要么需要:

  1. 在 Goutte 中手动设置 cookie,
  2. 或通过 Goutte 发送 json 帖子,以便更新它的 cookie jar。

我尝试使用 Goutte 的addContent方法创建一个表单然后发布它,但它不是作为 JSON 发送的,只是一个常规查询字符串。

4

2 回答 2

6

这是一个类方法,可以作为 JSON 和带有 Goutte 的 URL 编码的示例。

use Goutte\Client;

class a 
{
   /**
   * abstract the request content-type behind one single method,
   * since Goutte does not natively support this
   * @param string $method HTTP method (GET/POST/PUT..)
   * @param string $url URL to load
   * @param string $parameters HTTP parameters (POST, etc) to be sent URLencoded 
   *                           or in JSON format.
   * @return \Symfony\Component\BrowserKit\Response
   */
  protected function makeRequest($method, $url, $parameters) {
      $client = new Client();
      if ($this->requestFormat == 'json') {
          return $client->request($method, $url, array(), array(), array('HTTP_CONTENT_TYPE' => 'application/json'), json_encode($parameters));
      } else {
          return $client->request($method, $url, $parameters);
      }
  }
}
于 2014-02-04T22:36:40.273 回答
3

要在 Goutte 中设置 cookie,请尝试以下操作:

$client->getCookieJar()->set($cookie);

我相信 $cookie 是 type Symfony\Component\BrowserKit\Cookie,所以如果您检查文档,您应该能够以调用所需的形式发送 cookie。

如果您希望通过 POST 加载资源,请尝试以下操作:

$client->request('post', $url, $params);

我希望$params成为提交给 JSON 操作的关联值数组。

于 2014-02-04T22:30:30.020 回答