CURL 不遵循 301 重定向,我需要做啥?

Posted

技术标签:

【中文标题】CURL 不遵循 301 重定向,我需要做啥?【英文标题】:CURL is not following 301 Redirects, what do I need to do?CURL 不遵循 301 重定向,我需要做什么? 【发布时间】:2011-03-11 15:31:14 【问题描述】:

我正在使用 CURL c++ api 从 Yahoo 的金融 API 获取报价。 curl api 和我的代码似乎工作正常,但是当我告诉 CURL 访问我想要的 url 时,我收到了“301”重定向消息。如何让 CURL 跟随 301 重定向并获取我想要的数据?

这是我使用的网址:

http://download.finance.yahoo.com/d/quotes.csv?e=.csv&s=WSF,WSH&f=b2b3s

这是我得到的回复:

<HEAD><TITLE>Redirect</TITLE></HEAD>
<BODY BGCOLOR="white" FGCOLOR="black">
<FONT FACE="Helvetica,Arial"><B>
 "<em>http://download.finance.yahoo.com/d/quotes.csv?e=.csv&s=WSF,WSH,WSM,WSO,WST,WTI,WTM,WTR,WTS,WTU,WTW,WU,WWE,WWW,WX,WXS,WY,WYN,X,XAA,XCJ,XCO,XEC,XEL,XEL-A,XEL-E,XFB,XFD,XFH,XFJ,XFP,XFR,XIN,XJT,XKE,XKK,XKN,XKO,XL,XL-Y,XOM,XRM,XRX,XVF,XVG,Y,YGE,YPF,YSI,YUM,YZC,ZB-A,ZB-B,ZB-C,ZEP,ZF,ZLC,ZMH,ZNH,ZQK,ZTR,ZZ,ZZC&f=b2b3ccd1d2ghjkk2k3l2l3mm2m3m4m5m6m7m8opst7vw</em>".<p></B></FONT>

<!-- default "Redirect" response (301) -->
</BODY>

这是我的 CURL 初始化选项

CURL *eh = curl_easy_init();

curl_easy_setopt(eh, CURLOPT_WRITEFUNCTION, cb);
curl_easy_setopt(eh, CURLOPT_HEADER, 0L);
curl_easy_setopt(eh, CURLOPT_URL, url);
curl_easy_setopt(eh, CURLOPT_PRIVATE, url);
curl_easy_setopt(eh, CURLOPT_VERBOSE, 0L);

curl_multi_add_handle(cm, eh);

我没有发布我的代码,因为它都可以正常工作,我只需要使用 CURL 完成 301 的通用方法。

【问题讨论】:

【参考方案1】:

php 世界中,该选项被命名为 CURLOPT_FOLLOWLOCATION。我假设常量名称是标准化的并且来自同一个头文件,所以这应该适合你。

curl_easy_setopt(eh, CURLOPT_FOLLOWLOCATION, 1); 

(或在此上下文中的任何“布尔真”。)

或者,当接收到30x 状态码时,您可以手动解析Location 标头以获取新地址。显然,“关注位置”选项更容易,因为它不需要第二次请求。

【讨论】:

以上是关于CURL 不遵循 301 重定向,我需要做啥?的主要内容,如果未能解决你的问题,请参考以下文章

PHPs fopen 会遵循 301 重定向吗?

XHR HEAD 请求是不是有可能不遵循重定向 (301 302)

发布表单数据时linux curl 301重定向

使用 nginx 反向代理的 Docker 容器内的闪亮服务器不会遵循 301 重定向

ngin配置301重定向设置方法和nginx子目录301重定向

301 将 www.domain 重定向到 domain.com