CURL没有遵循301重定向,我需要做什么?

10
我正在使用CURL C++ API从Yahoo的财务API获取报价。Curl API和我的代码似乎都正常工作,但是当我告诉CURL访问我想要的URL时,我收到了一个“301”重定向消息。如何让CURL跟随301重定向并获取我想要的数据?这是我正在使用的URL:
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个回答

14
在PHP世界中,该选项名为CURLOPT_FOLLOWLOCATION。我认为常量名称是标准化的,并来自同一头文件,所以这对您应该有效。
curl_easy_setopt(eh, CURLOPT_FOLLOWLOCATION, 1); 

(或者在这个上下文中是什么意思的"布尔值真")

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接