PHP Goutte/CURL-完整的ASPX表单

PHP Goutte/CURL-完整的ASPX表单,php,asp.net,curl,web-scraping,goutte,Php,Asp.net,Curl,Web Scraping,Goutte,我试图从这里获取数据: 我正在检查商业名称是否免费。 但是这个网站是asp.net的网页形式,整个网站是一个大的形式。 我不知道如何从这个表格中获取数据 我认为问题在于: '__VIEWSTATE' => '', '__VIEWSTATEGENERATOR' => '9E6EC73D', '__EVENTVALIDATION' => '', 是否可以在PHP中发送请求并获取返回的数据? 因为,这个代码正在返回 当前节点列表为空

我试图从这里获取数据:

我正在检查商业名称是否免费。 但是这个网站是asp.net的网页形式,整个网站是一个大的形式。 我不知道如何从这个表格中获取数据

我认为问题在于:

        '__VIEWSTATE' => '',
        '__VIEWSTATEGENERATOR' => '9E6EC73D',
        '__EVENTVALIDATION' => '',
是否可以在PHP中发送请求并获取返回的数据? 因为,这个代码正在返回

当前节点列表为空

多谢各位

我的代码:

    $crawler = $client->request('GET', 'https://wyobiz.wy.gov/Business/FilingSearch.aspx');
    $form = $crawler->selectButton('Search')->form();
    $formValues = $form->getValues();
    $crawler = $client->submit($form, array(
        '__VIEWSTATE' => $formValues['__VIEWSTATE'],
        '__VIEWSTATEGENERATOR' => $formValues['__VIEWSTATEGENERATOR'],
        '__EVENTVALIDATION' => $formValues['__EVENTVALIDATION'],
        'ctl00$MainContent$myScriptManager' => 'MainContent_myScriptManager',
        'ctl00$MainContent$txtFilingName' => 'Google',
        'ctl00$MainContent$searchOpt' => 'chkSearchStartWith',
        'ctl00$MainContent$txtFilingID' => null,
    ));
    $crawler->filter('body')->each(function ($node) {
        print $node->text() . "\n";
    });


结论:痛风吸吮痛风的支持吸吮

嗯,我对goutte不太熟悉,但使用这个软件包,我制作了一个快速的示例来删除该链接的内容:

使用以下方式安装:

composer require w3zone/Crawler
然后将其用于您的案例,如下所示:

require_once __DIR__ . '/vendor/autoload.php';

use w3zone\Crawler\{Crawler, Services\phpCurl};

$crawler = new Crawler(new phpCurl);

$link = 'https://wyobiz.wy.gov/Business/FilingSearch.aspx';

$homePage = $crawler->get($link)->run();

preg_match('#<input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="(.*?)"\s*/>#', $homePage['body'], $viewState);
preg_match('#<input type="hidden" name="__VIEWSTATEGENERATOR" id="__VIEWSTATEGENERATOR" value="(.*?)"\s*/>#', $homePage['body'], $viewGen);
preg_match('#<input type="hidden" name="__EVENTVALIDATION" id="__EVENTVALIDATION" value="(.*?)"\s*/>#', $homePage['body' ], $eventVal);

$postData = array(
    '__VIEWSTATE' => $viewState[1],
    '__LASTFOCUS' => '',
    '__EVENTTARGET' => '',
    '__EVENTARGUMENT' => '',
    '__VIEWSTATEGENERATOR' => $viewGen[1],
    '__EVENTVALIDATION' => $eventVal[1],
    'ctl00$MainContent$myScriptManager' => 'MainContent_myScriptManager',
    'ctl00$MainContent$txtFilingName' => 'test',
    'ctl00$MainContent$searchOpt' => 'chkSearchStartWith',
    'ctl00$MainContent$txtFilingID' => '',
    'ctl00$MainContent$cmdSearch' => 'Search',
    '__ASYNCPOST' => 'true',
    'ctl00$MainContent$myScriptManager' => 'ctl00$MainContent$UpdatePanel1|ctl00$MainContent$cmdSearch',
);

$response = $crawler->post(['url' => $link, 'data' => $postData])->dumpHeaders()->run();

echo "<textarea style='width: 90%; height: 200px;'>".$response['body']."</textarea>";
require\u once\uuuuu DIR\uuuuuuu.'/供应商/autoload.php';
使用w3zone\Crawler\{Crawler,Services\phpCurl};
$crawler=新的爬虫程序(新的phpCurl);
$link='1https://wyobiz.wy.gov/Business/FilingSearch.aspx';
$homePage=$crawler->get($link)->run();
preg#u match(“##,$homePage['body]”,$viewState);
preg#u match(“##,$homePage['body]”,$viewGen);
preg#u match(“##,$homePage['body]”,$eventVal);
$postData=数组(
“\uu VIEWSTATE”=>$VIEWSTATE[1],
“\uu LASTFOCUS”=>”,
“\u EVENTTARGET”=>”,
“\uu EVENTARGUMENT”=>”,
“\uu VIEWSTATEGENERATOR”=>$viewGen[1],
“\uu EVENTVALIDATION”=>$eventVal[1],
“ctl00$MainContent$myScriptManager'=>“MainContent\u myScriptManager”,
'ctl00$MainContent$txtFilingName'=>'test',
'ctl00$MainContent$searchOpt'=>'chkSearchStartWith',
“ctl00$MainContent$txtFilingID'=>”,
“ctl00$MainContent$cmdSearch'=>“Search”,
“\uu ASYNCPOST”=>“true”,
“ctl00$MainContent$myScriptManager'=>“ctl00$MainContent$UpdatePanel1 | ctl00$MainContent$cmdSearch”,
);
$response=$crawler->post(['url'=>$link,'data'=>$postData])->dumpHeaders()->run();
回显“$response['body']”;

好吧,我对goutte不太熟悉,但使用这个软件包,我制作了一个快速的示例来删除该链接的内容:

使用以下方式安装:

composer require w3zone/Crawler
然后将其用于您的案例,如下所示:

require_once __DIR__ . '/vendor/autoload.php';

use w3zone\Crawler\{Crawler, Services\phpCurl};

$crawler = new Crawler(new phpCurl);

$link = 'https://wyobiz.wy.gov/Business/FilingSearch.aspx';

$homePage = $crawler->get($link)->run();

preg_match('#<input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="(.*?)"\s*/>#', $homePage['body'], $viewState);
preg_match('#<input type="hidden" name="__VIEWSTATEGENERATOR" id="__VIEWSTATEGENERATOR" value="(.*?)"\s*/>#', $homePage['body'], $viewGen);
preg_match('#<input type="hidden" name="__EVENTVALIDATION" id="__EVENTVALIDATION" value="(.*?)"\s*/>#', $homePage['body' ], $eventVal);

$postData = array(
    '__VIEWSTATE' => $viewState[1],
    '__LASTFOCUS' => '',
    '__EVENTTARGET' => '',
    '__EVENTARGUMENT' => '',
    '__VIEWSTATEGENERATOR' => $viewGen[1],
    '__EVENTVALIDATION' => $eventVal[1],
    'ctl00$MainContent$myScriptManager' => 'MainContent_myScriptManager',
    'ctl00$MainContent$txtFilingName' => 'test',
    'ctl00$MainContent$searchOpt' => 'chkSearchStartWith',
    'ctl00$MainContent$txtFilingID' => '',
    'ctl00$MainContent$cmdSearch' => 'Search',
    '__ASYNCPOST' => 'true',
    'ctl00$MainContent$myScriptManager' => 'ctl00$MainContent$UpdatePanel1|ctl00$MainContent$cmdSearch',
);

$response = $crawler->post(['url' => $link, 'data' => $postData])->dumpHeaders()->run();

echo "<textarea style='width: 90%; height: 200px;'>".$response['body']."</textarea>";
require\u once\uuuuu DIR\uuuuuuu.'/供应商/autoload.php';
使用w3zone\Crawler\{Crawler,Services\phpCurl};
$crawler=新的爬虫程序(新的phpCurl);
$link='1https://wyobiz.wy.gov/Business/FilingSearch.aspx';
$homePage=$crawler->get($link)->run();
preg#u match(“##,$homePage['body]”,$viewState);
preg#u match(“##,$homePage['body]”,$viewGen);
preg#u match(“##,$homePage['body]”,$eventVal);
$postData=数组(
“\uu VIEWSTATE”=>$VIEWSTATE[1],
“\uu LASTFOCUS”=>”,
“\u EVENTTARGET”=>”,
“\uu EVENTARGUMENT”=>”,
“\uu VIEWSTATEGENERATOR”=>$viewGen[1],
“\uu EVENTVALIDATION”=>$eventVal[1],
“ctl00$MainContent$myScriptManager'=>“MainContent\u myScriptManager”,
'ctl00$MainContent$txtFilingName'=>'test',
'ctl00$MainContent$searchOpt'=>'chkSearchStartWith',
“ctl00$MainContent$txtFilingID'=>”,
“ctl00$MainContent$cmdSearch'=>“Search”,
“\uu ASYNCPOST”=>“true”,
“ctl00$MainContent$myScriptManager'=>“ctl00$MainContent$UpdatePanel1 | ctl00$MainContent$cmdSearch”,
);
$response=$crawler->post(['url'=>$link,'data'=>$postData])->dumpHeaders()->run();
回显“$response['body']”;

我的问题是ASP异步响应不是HTML,而是包含HTML的文本:

<html>
1|#||4|6079|updatePanel|ctl00_MainContentPlaceHolder_ucLicenseLookup_UpdtPanelGridLookup|
                <div class="modal-window-lookup-results fade bs-example-modal-lg in">
                    <div class="modal-header">
    [...]

</html>  

1 |#| | | | 4 | 6079 |更新面板| ctl00 |主内容占位符| ucLicenseLookup | UpdtPanelGridLookup ||
[...]
所以,当goutte将其输入浏览器工具包时,它会断开。痛风不吸- 你不能给它提供非HTML垃圾

为了尽快解决这个问题,我做了:

$crawler = $client->request('POST', $url, $params);
// this is a broken crawler because response is not html!

$html = $client->getResponse()->getContent();
$html = substr($html, strpos($html, "<div"));
$html = substr($html, 0, strpos($html, "|hiddenField|")-3);
$html = "<!DOCTYPE html><html>$html</html>";
$crawler = new \Symfony\Component\DomCrawler\Crawler($html);
print $crawler->html();
$crawler=$client->request('POST',$url,$params);
//这是一个坏的爬虫,因为响应不是html!
$html=$client->getResponse()->getContent();

$html=substr($html,strpos($html,”我的问题是ASP异步响应不是html,而是包含html的文本:

<html>
1|#||4|6079|updatePanel|ctl00_MainContentPlaceHolder_ucLicenseLookup_UpdtPanelGridLookup|
                <div class="modal-window-lookup-results fade bs-example-modal-lg in">
                    <div class="modal-header">
    [...]

</html>  

1 |#| | | | 4 | 6079 |更新面板| ctl00 |主内容占位符| ucLicenseLookup | UpdtPanelGridLookup ||
[...]
所以,当goutte将其输入浏览器工具包时,它会断开。goutte不会吮吸- 你不能给它提供非HTML垃圾

为了尽快解决这个问题,我做了:

$crawler = $client->request('POST', $url, $params);
// this is a broken crawler because response is not html!

$html = $client->getResponse()->getContent();
$html = substr($html, strpos($html, "<div"));
$html = substr($html, 0, strpos($html, "|hiddenField|")-3);
$html = "<!DOCTYPE html><html>$html</html>";
$crawler = new \Symfony\Component\DomCrawler\Crawler($html);
print $crawler->html();
$crawler=$client->request('POST',$url,$params);
//这是一个坏的爬虫,因为响应不是html!
$html=$client->getResponse()->getContent();


$html=substr($html,strpos($html),“我开始认为,这是不可能的…
$formValues[''uu\u VIEWSTATE']
这个变量的输出是什么?它是否为空?@hassan不,它不是空的。它返回了很长的字符串。我不明白为什么它不工作。\uuu VIEWSTATE、\uu VIEWSTATEGENERATOR、\uu EVENTVALIDATION设置正确……我认为您发送的参数中存在问题;您没有发送所需的完整参数。我正在开始想一想,这是不可能的…
$formValues['''uu\u VIEWSTATE']
这个变量的输出是什么?它是否为空?@hassan不,它不是空的。它返回了很长的字符串。我不明白为什么它不工作。\uuu VIEWSTATE、\uu VIEWSTATEGENERATOR、\uu EVENTVALIDATION设置正确……我认为您发送的参数中存在问题;您没有发送所需的完整参数Hanks,有吗你尝试过这个?如果你删除u LASTFOCUS、u EVENTTARGET、u EVENTARGUMENT会发生什么?不,你可以尝试,但因为它们包含空值,如果你包含它们就可以了;这解决了你的问题吗?嘿,不,我被告知,这个网站对机器人搜索或其他东西有一些保护。我正在尝试获取更多信息。顺便说一句,你可以吗请尝试一下?可能是我的项目出了问题。谢谢,你尝试过了吗?如果你删除了uu LASTFOCUS、u EVENTTARGET、u EVENTARGUMENT会怎么样?不,你可以尝试,但是因为它们包含空值,如果你包含它们就可以了;这解决了你的问题吗?嘿,不,我被告知,t