【问题标题】:Search query works in browser but error out in curl method搜索查询在浏览器中有效,但在 curl 方法中出错
【发布时间】:2017-09-07 07:25:10
【问题描述】:
【问题讨论】:
标签:
curl
search
http-status-code-404
walmart-api
【解决方案1】:
如果它在浏览器中工作,那么它是 GET 方法而不是 POST 方法。
但是如果你像这样使用GET 运行它:
curl -d "query=bread&store=5461&size=20&offset=0" -X GET http://search.mobile.walmart.com/search 。您将获得以下信息:
<HTML><HEAD>
<TITLE>Access Denied</TITLE>
</HEAD><BODY>
<H1>Access Denied</H1>
You don't have permission to access "http://search.mobile.walmart.com/search" on this server.<P>
Reference #18.2d00a81f.1504771199.d72c55
</BODY>
</HTML>
这基本上意味着沃尔玛不希望您使用网络浏览器以外的任何东西访问其网站。
但是您仍然可以尝试更改标题以模仿浏览器。还要更改UserAgent 字符串。查看this 的答案以了解如何操作。这可能会有所帮助。
编辑
实际上我现在已经检查过了,并且只使用了
curl -X GET "http://search.mobile.walmart.com/search?query=bread&store=5461&size=20&offset=0"
工作正常。您不需要将-d 与GET 一起使用。只需将查询字符串添加到 URL。
【解决方案2】:
你在这里犯了两个错误,首先,那个url不支持POST请求,看起来它只支持GET请求,所以不要做-X POST,第二,网站不支持在请求正文中包含搜索参数,并且 -d 将数据放入请求正文中,在您的示例中,使用 application/x-www-urlencoded 格式。该站点仅支持通过外观在请求 URL 中包含参数。也一样
curl 'http://search.mobile.walmart.com/search?query=bread&store=5461&size=20&offset=0'
这将发出一个 GET 请求,带有 url 中的参数,就像网站想要的那样。 protip,在调试 curl 时,添加-v 参数,它会打印很多有用的调试信息:)