2010-07-04 70 views
10

我正在使用CURL C++ api從Yahoo的財務API獲取報價。 curl api和我的代碼似乎工作正常,但是當我告訴CURL訪問我想要的url時,我收到了「301」重定向消息。我怎樣才能讓CURL通過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 *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的一般方法。

回答

13

在PHP世界中,該選項名爲CURLOPT_FOLLOWLOCATION。我假設常量名稱是標準化的,來自同一個頭文件,所以這應該適用於你。

curl_easy_setopt(eh, CURLOPT_FOLLOWLOCATION, 1); 

(或任何「布爾真」是在該上下文中。)

可替代地,接收30x狀態代碼時,可以手動解析Location頭爲新地址。顯然,「跟蹤位置」選項更容易,因爲它不需要第二個請求。