用 goutte/guzzle 填写表格 |交响乐 4

Fill form with goutte/guzzle | symfony 4

我正在尝试创建一个应用程序来抓取广告(例如公寓租赁),并且只需在外部网站上单击一下即可创建类似的广告。抓取已完成,但我不知道如何处理添加此广告。授权很简单,所以我自己做了,但我不知道如何进入这个表格,因为在我填写这个表格之前,我必须选择一些带有js按钮的选项,如下面的gif所示。

部分授权,登录。

$crawler = $client->request('GET', 'https://www.gumtree.pl/login.html');
        dump($crawler->html());
        $form = $crawler->filter("form")->form();
        $crawler = $client->submit($form, array(
            'email' => 'email',
            'password' => 'password'
        ));

我没有将另一部分附加到表格中,因为它无论如何都不起作用。

URL 形式:https://www.gumtree.pl/post.html

外观:https://i.imgur.com/F00oLab.gifv

@edit

我通过浏览器发出请求,然后我尝试通过 symfony 应用程序发出相同的请求,但它仍然无法正常工作。

我的chrome请求:

我对 symfony 的尝试:

$res = $client->get('https://www.gumtree.pl/post.html', [
            'auth' => [
                'username',
                'password'
            ],
            'form_params' => [
                'locationId' => '3200025',
                'categoryId' => '9073',
                'machineId' => 'xxxx',
                'DwellingForSaleBy' => 'ownr',
                'DwellingType' => 'flat',
                'AreaInMeters' => '50',
                'NumberRooms' => '3',
                'NumberBathrooms' => '10',
                'Parking' => 'grage',
                'Title' => 'titleeeeeeeee',
                'Description' => '<p>test desc</p>',
                'priceTypes' => 'FIXED',
                'Price' => '459999',
                'currencyValues' => 'PLN',
                'UserName' => 'username',
                'Email' => 'email',
            ]
        ]);

但是 Symfony 中的请求 return 代码为 200,而它应该 return 302。

响应转储:

有什么处理方法吗?

您正在抓取的页面充满了 ajax,我认为您应该直接 post 使用 Guzzle 的表单数据 http://docs.guzzlephp.org/en/stable/quickstart.html#post-form-requests

$response = $client->request('POST', 'https://www.gumtree.pl/post.html', [
    'form_params' => [
        'field_name' => 'abc',
        'other_field' => '123',
        'nested_field' => [
            'nested' => 'hello'
        ]
    ]
]);