2

以下搜索查询适用于任何 Internet 浏览器,例如 IE、Chrome 或 Firefox。

http://search.mobile.walmart.com/search?query=bread&store=5461&size=20&offset=0

但是,如果我使用curl带有参数的 POST 方法:

curl -d "query=bread&store=5461&size=20&offset=0" -X POST http://search.mobile.walmart.com/search

我收到错误消息:

“状态代码:404,“错误”:“未找到”

4

2 回答 2

2

如果它在浏览器中工作,那么它是一种GET方法而不是一种POST方法。但如果你这样运行它GETcurl -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&#58;&#47;&#47;search&#46;mobile&#46;walmart&#46;com&#47;search" on this server.<P>
Reference&#32;&#35;18&#46;2d00a81f&#46;1504771199&#46;d72c55
</BODY>
</HTML>

这基本上意味着沃尔玛不希望您使用除网络浏览器以外的任何东西访问其网站。但是您仍然可以尝试更改标题以模仿浏览器。还要更改UserAgent字符串。在这个答案中查看如何做到这一点。这可能会有所帮助。

编辑 实际上我现在已经检查过了,使用 curl -X GET "http://search.mobile.walmart.com/search?query=bread&store=5461&size=20&offset=0" 效果很好。你不需要使用-dwith GET。只需将查询字符串添加到 URL。

于 2017-09-07T08:20:06.850 回答
0

你在这里犯了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参数,它会打印很多有用的调试信息:)

于 2017-09-07T10:40:14.267 回答