【发布时间】:2018-04-18 14:55:27
【问题描述】:
Diffbot docs 建议设置自定义标头,包括Cookies,我只需在标头中添加X-Forward 前缀即可。
例如我执行以下操作
cookie='SportsDirect_AnonymousUserCurrency=CNY'
user_agent = 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Ubuntu Chromium/65.0.3325.181 Chrome/65.0.3325.181 Safari/537.36'
headers = {'X-Forward-User-Agent': user_agent,'X-Forward-Cookie': cookie}
然后我通过我的客户端向 URL https://www.sportsdirect.com/adidas-ace-17-1-mens-fg-football-boots-203193?colcode=20319312 发出请求,我可以在 Wireshark 中看到客户端正确传递了 X-Forward 标头:
但目标网站仍以美元而不是人民币作出响应。
这与简单的 cURL 形成对比:
curl 'https://www.sportsdirect.com/adidas-ace-17-1-mens-fg-football-boots-203193?colcode=20319312' -H 'Cookie: SportsDirect_AnonymousUserCurrency=CNY' --compressed | grep -A 5 pdpPrice
按照“SportsDirect_AnonymousUserCurrency”显示价格。
不过,我最终测试了使用 diffbot 向https://webhook.site 发出请求,该请求会记录所有请求以及发送到它提供给您的特殊地址的标头。
很明显,Diffbot 确实转发了我的标头,所以令人费解的是,为什么它无法获得正确的货币,而 cURL 却获得了正确的货币。
【问题讨论】:
-
Diffbot 在美国使用服务器,因此您的 IP 可能是一个主要因素,这就是为什么您默认使用 CNY,而不是标头本身。尝试使用不带标题的 curl 时,网站是否返回美国或人民币?
-
我的 IP 是英国。如果我 cURL 没有标题,我会得到 GBP。如果我 diffbot 没有标题,我会得到美元。对我来说,带有单个
SportsDirect_AnonymousUserCurrency的 cURL 足以根据需要更改货币,但正如下面的答案所示,我需要 2 个 cookie 才能让 diffbot 更改货币。
标签: diffbot