我注意到一个问题。如果我复制带有搜索结果的亚马逊 URL,而具有另一个 IP 的人打开它,那么结果可能会有所不同。例如:https://www.amazon.com/s/ref=sr_nr_p_36_0?lo=toys-and-games&rh=n%3A165793011%2Cp_72%3A1248964011&sort=price-desc-rank&low-price=34.99&high-price=34.99
如果您从达拉斯 IP 打开此 URL,您将获得 102 个包含结果的页面。
如果你用檀香山IP打开它,你会得到101页。
如果你从俄罗斯IP打开它,你会得到93页。
是否可以在URL中指定美国邮政编码以进行运输,以便为每个IP地址显示相同的结果?
我注意到的另一个小问题 - 它为不同的人显示不同的页面布局。有时它是默认的蓝色链接,有时它有银色按钮。也许有人知道如何使用 url 参数将设计锁定到一个布局?:)
没有简单的解决方案,所以这是我的复杂方法。
这个想法是:您必须发送与在浏览器中手动更改ZIP时发送的请求相同的请求。然后,您的邮政编码将被记住。
这是我使用 GuzzleHttp 客户端在 PHP 中的解决方案:
$jar = new GuzzleHttpCookieCookieJar();
$client = new GuzzleHttpClient([
'headers' => [
'accept' => 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
'accept-language' => 'en;q=0.8',
'user-agent' => '', //set some User-Agent or just leave it empty cos it works too
'x-requested-with' => 'XMLHttpRequest'
],
'cookies' => $jar,
]);
try {
$client->post('https://www.amazon.com/gp/delivery/ajax/address-change.html', [
'form_params' => [
'locationType' => 'LOCATION_INPUT',
'zipCode' => '11219', //YOUR ZIP HERE
'storeContext' => 'office-products',
'deviceType' => 'web',
'pageType' => 'Detail',
'actionSource' => 'glow',
]
]);
} catch (RequestException $e) {
echo "Failed to set ZIP";
}
$response = $client->get('...'); //get any other page from Amazon, now it will have proper ZIP
我正在使用很棒的 Guzzle 功能 - cookies
容器:http://docs.guzzlephp.org/en/stable/request-options.html#cookies它可以像浏览器一样记住和处理请求之间的cookie。
在所有进一步的请求中,您应该继续使用这些cookie,它将返回您的ZIP结果。
当然,您可以手动处理cookie,Guzzle不是必需的,但使事情更简单。