客户希望我们通过RSS Feed传送内容,他们使用cURL获取Feed内容,但他们说他们会收到404错误。我在终端中尝试了这个命令:$ curl -g --compressed http://mediosymedia.com/wp-content/plugins/nextgen-gallery/xml/media-rss.php > temp.xml
并且客户端说我得到404页面而不是feed。当我在浏览器中输入URI时,它显示了Feed没有问题。
我无法更改客户端应用中的任何内容,因此,如何确保他们获取Feed而不是404错误?
谢谢!
答案 0 :(得分:1)
确实,curl
会返回404状态页面:
$ curl -g --compressed http://mediosymedia.com/wp-content/plugins/nextgen-gallery/xml/media-rss.php -s -o /dev/null -D-
HTTP/1.1 **404 Not Found**
Date: Tue, 04 Mar 2014 08:12:27 GMT
Server: Apache
X-Pingback: http://mediosymedia.com/xmlrpc.php
Expires: Wed, 11 Jan 1984 05:00:00 GMT
Cache-Control: no-cache, must-revalidate, max-age=0
Pragma: no-cache
Transfer-Encoding: chunked
Content-Type: text/html; charset=UTF-8
许多网络服务器会怀疑没有浏览器User-Agent
的请求,因为他们希望curl
用于抓取。这可能不是最聪明的技术,因为简单的UserAgent欺骗会解决这个问题:
$ curl -g --compressed http://mediosymedia.com/wp-content/plugins/nextgen-gallery/xml/media-rss.php -s -o /dev/null -D- -H'User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.9; rv:27.0) Gecko/20100101 Firefox/27.0'
HTTP/1.1 **200 OK**
Date: Tue, 04 Mar 2014 08:13:46 GMT
Server: Apache
Expires: Wed, 11 Jan 1984 05:00:00 GMT
Cache-Control: no-cache, must-revalidate, max-age=0
Pragma: no-cache
Transfer-Encoding: chunked
Content-Type: text/xml;charset=utf-8
因此,在实践中,请确保为不是Curl的请求设置User-Agent。
答案 1 :(得分:0)
我最初的原因是这可能与cookie有关(见this question),但这可能是一个本地化的问题。我的机器工作正常:
[root@devtest tmp]# curl -g --compressed http://mediosymedia.com/wp-content/plug
ins/nextgen-gallery/xml/media-rss.php > temp.xml
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 27926 0 27926 0 0 54564 0 --:--:-- --:--:-- --:--:-- 69815
感谢Julien指出下载文件的内容是自定义404页面内容。正如他所提到的,您需要在-A
个请求中添加一个useragent标记(curl
):
# curl -A "User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1
; en-US; rv:1.9.2.12) Gecko/20101026 Firefox/3.6.12"-g --compressed http://medio
symedia.com/wp-content/plugins/nextgen-gallery/xml/media-rss.php > temp.xml
我会删除我的答案,但是值得留下来作为对可能遇到此问题的其他人的警告 - 确保您验证回复!