Php GUZULE7多部分/表单数据POST工作不正常
我正在尝试重新创建提交表单。但是由于某些原因,我的POST请求没有返回正确的页面。下面我包含了一个可以正常工作的原始卷曲请求,然后是无法正常工作的狂饮代码 我破碎的Guzzle代码和正在工作的CURL请求之间有什么区别 我的狂饮代码:Php GUZULE7多部分/表单数据POST工作不正常,php,web-crawler,guzzle,Php,Web Crawler,Guzzle,我正在尝试重新创建提交表单。但是由于某些原因,我的POST请求没有返回正确的页面。下面我包含了一个可以正常工作的原始卷曲请求,然后是无法正常工作的狂饮代码 我破碎的Guzzle代码和正在工作的CURL请求之间有什么区别 我的狂饮代码: $jar = new \GuzzleHttp\Cookie\CookieJar; $client = new \GuzzleHttp\Client([ 'base_uri' => 'https://www.southeast
$jar = new \GuzzleHttp\Cookie\CookieJar;
$client = new \GuzzleHttp\Client([
'base_uri' => 'https://www.southeastwater.co.uk',
'cookies' => $jar,
]);
$res = $client->request('GET', '/my-water-supply/my-water-looks-smells-strange/check-your-water-quality-hardness');
$html = new \simplehtmldom\HtmlDocument($res->getBody());
$form = $html->find('form.sewForm',1);
foreach($form->find('input') as $n => $input){
$x = [
'name' => $input->name,
'contents' => $input->value,
];
$post[] = $x;
if($n == 0){ // This is button field does just manually add it after the first input
$post[] = [
'name' => 'Jump',
'contents' => '10',
];
}
}
$post = [
'multipart/form-data' => $post
];
$res2 = $client->post('/my-water-supply/my-water-looks-smells-strange/check-your-water-quality-hardness', $post);
echo $res2->getBody();
// But body is wrong, it's shows HTML as if I had just refreshed the page and not submitted the POST at all.
exit();
以下是工作请求:
curl 'https://www.southeastwater.co.uk/my-water-supply/my-water-looks-smells-strange/check-your-water-quality-hardness'
-H 'User-Agent: Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:84.0) Gecko/20100101 Firefox/84.0'
-H 'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8'
-H 'Accept-Language: en-US,en;q=0.5' --compressed
-H 'Content-Type: multipart/form-data; boundary=---------------------------18455269113520999061513576751'
-H 'Origin: https://www.southeastwater.co.uk'
-H 'Connection: keep-alive'
-H 'Referer: https://www.southeastwater.co.uk/my-water-supply/my-water-looks-smells-strange/check-your-water-quality-hardness'
-H 'Cookie: __RequestVerificationToken=Tnrx3xY2ia2Dk5fBdi16ppscN3_TeR67OLBDf8mz1WeYzUZIUPLRjXMDUZJbN7uH5oEGZOkDG-m_sf_8waTv3bxfYyEQjiBHSI2HeNFGMMM1'
-H 'Upgrade-Insecure-Requests: 1'
--data-binary $'-----------------------------18455269113520999061513576751\r\nContent-Disposition: form-data; name="__RequestVerificationToken"\r\n\r\nnlEsW1Iccl9L3dc_gNgdRzKO0VKRQxxznr3WV8SiKixyRZRCnlAuvKAZZEvERfJP-Al8wldrb5vSTIbeeZMXh8LSPSy6gTX9bTmQONCKnzg1\r\n-----------------------------18455269113520999061513576751\r\nContent-Disposition: form-data; name="Jump"\r\n\r\n10\r\n-----------------------------18455269113520999061513576751\r\nContent-Disposition: form-data; name="WaterHardnessStep10_Postcode.Postcode"\r\n\r\n\r\n-----------------------------18455269113520999061513576751\r\nContent-Disposition: form-data; name="WaterHardnessStep10_Postcode.ContactReason"\r\n\r\n\r\n-----------------------------18455269113520999061513576751\r\nContent-Disposition: form-data; name="WaterHardnessStep10_Postcode.IsPostcodeInSupplyArea"\r\n\r\nFalse\r\n-----------------------------18455269113520999061513576751\r\nContent-Disposition: form-data; name="WaterHardnessStep10_Postcode.SummaryHTML"\r\n\r\n\r\n-----------------------------18455269113520999061513576751\r\nContent-Disposition: form-data; name="ufprt"\r\n\r\n674979BCF955C16BD4492455228446D83AF77F393A0590F7C5DFEB8B23D87FC7F5657AB9254637877D139888488F106804F9982255BDCC1895FBD49330FB5DBC2BEB0F5F43ECBCDF1B5441ADAA5C8F5EBC1BBAB24EA9E7E0A21F3429BDB5264E425D439FAB6C4863B68120C0A90C3BF990A5D01CDBA3C88716BFDFF84EABE11F447DA1607D0E3FBF2A2890DFB2420C8C\r\n-----------------------------18455269113520999061513576751--\r\n'
首先,我觉得您正在使用Cookie jar实例,但尚未设置Cookie
$jar = new \GuzzleHttp\Cookie\CookieJar;
$jar = \GuzzleHttp\Cookie\CookieJar::fromArray(
[
'__RequestVerificationToken' => 'your token ...'
],
'https://www.southeastwater.co.uk'
);
$r = $client->request('GET', 'https://www.southeastwater.co.uk', [
'cookies' => $jar
]);
此外,您还需要在guzzle中的multipart key中以multipart/form数据的形式发送要发送的内容
$res2 = $client->post('/my-water-supply/my-water-looks-smells-strange/check-your-water-quality-hardness', [
'multipart' => $post
]
]);
注:
我假设从这一步获得$post
$post[] = [
'name' => 'Jump',
'contents' => '10',
];
谢谢,原来我的问题是使用:
$post=['multipart/formdata'=>$post]相反,我应该使用:$post=['multipart'=>$post]代码>这是我在回答中写的另外,您还需要在guzzle的multipart key中以multipart/form data的形式发送要发送的内容,请参见这一行