答案 0 :(得分:2)
detailskip.taobao.com/json/dyn_combo.do阻止任何没有“referrer”标题指向另一个detailskip.taobao.com网址的请求。请注意,引用者不必是真实的,你可以伪造它,它们实际上没有验证它,标题只需要在那里。此外,他们在用户代理标头中使用“php”阻止任何请求。它们也会阻止任何没有用户代理标头的请求。
示例代码伪造referrer头和user-agent以获取json(使用my hhb_curl library作为错误检测curl_函数的包装器):
<?php
declare(strict_types = 1);
header ( "content-type: text/plain;charset=utf8" );
require_once ('hhb_.inc.php');
$json = (new hhb_curl ( '', true ))->setopt_array ( array (
CURLOPT_URL => 'https://detailskip.taobao.com/json/dyn_combo.do?itemId=556926591992&databiz=promotionPrice,upp,bonuscoupon,shopbonuscoupon,shopbonuscoupon,shopcoupon,sidebarcoupon,overseaNewDelivery,dynStock,overseaViewer,contract,activitySwitch,buycount',
CURLOPT_USERAGENT => 'curl/7.52.1',
CURLOPT_HTTPHEADER => array (
'Referer: https://world.taobao.com/item/556926591992.html'
)
) )->exec ()->getStdOut();
echo $json;
答案 1 :(得分:1)
你究竟能解析什么?我没有解析产品价格和产品名称的问题,
<?php
declare(strict_types = 1);
$html = file_get_contents ( 'https://world.taobao.com/item/556926591992.html' );
$domd = @DOMDocument::loadHTML ( $html );
$xp = new DOMXPath ( $domd );
$name = $xp->query ( '//span[@itemprop="name"]' )->item ( 0 )->textContent;
$price = trim ( preg_replace ( '/\s+/u', ' ', $xp->query ( '//div[contains(@class,"price-show") and not(contains(@class,"hidden"))]' )->item ( 0 )->textContent ) );
var_dump ( $name, $price );
输出:
string(82) "欧美高街bf风潮牌oversize宽松男女嘻哈hiphop套头卫衣情侣装外套"
string(9) "¥ 189.00"
(和protip,curl会因为它对内容长度的理解而运行得更快,而file_get_contents仅在套接字关闭时才会读取,如果使用CURLOPT_ENCODING,curl将使用相当少的带宽,因为这个网站和curl支持file_get_contents不支持的gzip压缩传输,curl不依赖于allow_url_fopen
php.ini设置,file_get_contents需要)