- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
目的是在远程网站上填充一个表单[id=thisAwesomeRemoteForm][action=#]
。只有一个字段 (input[name=awesomeField]
) 需要填充,然后需要提交表单。作为最后的要求,用户需要从我的网站重定向到这个远程网站,就好像它已经在远程网站上提交了表单一样。
长话短说,我需要用户能够单击我的链接,让 PHP 完成工作并重定向到该远程网站,就好像它已经在远程网站上填写并提交了表单一样。我不能让用户自己填写远程表单。
目前的代码是:
use Goutte\Client;
// ...
public function gotoAction($data)
{
$client = new Client();
$crawler = $client->request('GET', self::MY_URL);
$form = $crawler->filter('form[id=thisAwesomeRemoteForm]')->form();
$form->setValues(array('awesomeField' => $data));
$crawler = $client->submit($form);
return $this->redirect($form->getUri());
}
到目前为止,我被重定向到 form
所在的第一个 URL,而不是 form
应该指向的位置。不过,该字段填充了正确的数据。
我的代码是否正确以实现我的目的(因此,它是远程网站可能使用 JavaScript 发送表单或其他)还是我遗漏了一些相当明显的东西?
最佳答案
Goutte 基本上是 Guzzle 到 Symfony\Browserkit
API 的适配器。根据对 Goutte\Client
源代码的粗略分析,effectiveUrl()
未被使用或继承。这意味着如果发生重定向,您将不会“捡起它”。
您可以使用以下代码片段使用基本组件(Guzzle、DomCrawler)轻松地执行相同的功能:
$client = new GuzzleHttp\Client([
'debug' => true, // only to troubleshoot
);
// Obtain the html page with the form
$request = $client->createRequest('GET', $url);
$response = $client->send($request);
// or $response = $client->get($url);
// create crawler and obtain the form.
$crawler = new Symfony\Component\DomCrawler\Crawler(null, $response->getEffectiveUrl());
$crawler->addContent(
$response->getBody()->__toString(),
$response->getHeader('Content-Type')
);
$form = $crawler->form('form_identifier');
$form->setValues($data_array);
//form submission
$request = $client->createRequest(
$form->getMethod(),
$form->getUrl(),
[
'body' => $form->getPhpValues(),
]);
$response = $client->send($request);
关于php - 如何使用 Goutte 提交表单并获取最终 URI?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29825925/
我正在使用 php 7.4.1和 "fabpot/goutte": "^3.3" . 我有以下脚本: request('GET', $url)->html(); $crawler =
首页搜索测试正常。但我不确定提交应该如何工作以及如何调试它。这就是我所拥有的: behat.yml default: formatter: name: progress
我尝试通过 Goutte 列表从流行的拍卖网络服务中抓取,但它们的部分代码是由 javascript 呈现的,问题是 Goutte 只返回没有 JS 作业的 DOM。因此,如果 symphony 是
我尝试使用 Guzzle 的文档来设置代理,但它不起作用。 Goutte 的官方 Github 页面已经死了,所以在那里找不到任何东西。 有人知道如何设置代理吗? 这是我尝试过的: $client =
我正在使用"fabpot/goutte": "^4.0",。 我正在尝试从网站获取数组中的日期和版本。 请找到我的可运行示例: request('GET', $url)->html(); $c
我正在使用"fabpot/goutte": "^4.0",。 我正在尝试从网站获取数组中的日期和版本。 请找到我的可运行示例: request('GET', $url)->html(); $c
如何抓取 data-来自 的属性链接使用goutte和 laravel ? 我想像这样抓取标签: 在此内然后我想抓取 data-original-title 链接标签。 我的代码是: $clien
我正在抓取的一个站点对两个参数使用相同的名称,因此我想做这样的事情: $params = array('dates' => '20140414', 'o' => '192382', 'o' => '2
能否请您帮助我找到一种使用 Goutte 从元描述、元关键字和机器人内容中获取内容的方法。另外,我如何定位 和 ? 下面是我用来获取的PHP内容: require_once 'goutte.phar
我的网站上有 html ( http://testsite.com/test.php) : click back click back
我有以下代码,但它总是返回一个 407 HTTP 状态代码。 $url = 'http://whatismyip.org'; $client = new Client(); $options = ar
我在玩 Goutte,但无法连接到某个网站。所有其他 URL 似乎都运行良好,我正在努力了解是什么阻止了它的连接。它只是挂起,直到 30 秒后超时。如果我删除超时,同样的情况会在 150 秒后发生。
如何配置 Goutte Client 使用文件将 cookie 存储在文件中?我知道它是一种围绕 GuzzleHttp 客户端的包装器。但我无法将其配置为将 cookie 保存到文件中以在请求之间重用
我被这个错误困住了...但客户端已定义。 我的代码是这样的 use Goutte\Client; use Illuminate\Http\Request; use GuzzleHttp\Client
我正在尝试从此 url 获取数据与 Goutte但是,当我尝试仅过滤具有“empresa”类的 div 时,我得到了整个页面。如何仅过滤具有特定类的 div? 这是我的代码: re
我正在抓取网站,目前使用 Goutte 解析 HTML 没有问题。但我需要从网站检索 JSON,并且由于 cookie 管理,我不想使用 file_get_contents() 执行此操作 - 这是行
这段代码,返回内容的 hrefs,现在我想从这个 hrefs 中提取内容并将其发送到我的 View 。命名我需要提取的 div: Contact: Monkey
我不知道如何在 Goutte 中设置 cookie。我正在尝试以下代码: $client->setHeader('User-Agent', 'Mozilla/5.0 (Macintosh; Intel
我正在尝试使用 goutte 返回一组项目,我可以将它们打印出来,但我希望它们在一个数组中,就像 API 一样。这是示例代码。我正在使用 Laravel 5.1。 public function in
目的是在远程网站上填充一个表单[id=thisAwesomeRemoteForm][action=#]。只有一个字段 (input[name=awesomeField]) 需要填充,然后需要提交表单。
我是一名优秀的程序员,十分优秀!